2017-02-24 81 views
1

我有一个ML编程任务,并在几个函数中,保持计数是有用的。例如,在一个函数中,我需要返回一个元素出现的索引列表。我不知道如何在递归中跟踪这些事情,因为曾经的函数调用会杀死我的数量。在现实世界中,我会考虑计数变量,但这在学校中不是一种选择。有小费吗?我应该如何保持递归函数计数。没有尾递归或额外参数

+1

为什么尾递归不是一种选择? – Yawar

+2

您需要传递函数所需的信息以完成其工作。为什么你不能创建具有额外参数的辅助函数?这样的事情通常在ML中完成。辅助函数的定义可以完全局限于函数(使用'let fun ... in ... end'),所以在这个意义上,整体函数不会被任何额外的参数所混淆。 –

+0

@Yawar,老师下订单。 –

回答

2

如果你可以使用帮助函数,你基本上可以使用尾递归。你的老师不会给你,强迫你使用比纯递归其他技术

模式具有这些功能通常是递归的问题:

fun outer list = 
    let 
    fun inner param inner_list = 
     (* use tail recursion here *) 
    in 
    inner initial_param list 
    end 
+0

我会用let,in,end来解决至少一个问题。 顺便说一句,我嫉妒你得拿杯子!谢谢你的帮助。 –

+0

干杯对不起,只是修正了语法。当我最初写这篇文章时,我可能正在考虑OCaml。 – Yawar