0

我想用 SML 编写一个模仿 C++ 的代码

i=i+1;

或者

i++

简而言之,我想计算当 if 语句为真时循环(递归)运行了多少次。进一步阐明它。我有问题的代码如下所示:

val i = 0;
fun <function_name>() = 
   if <condition>
   then (i+1;
         <recursive_expression>)
  else expression

但这里的问题是,由于 SML/NJ 中的不变性,无论执行多少次递归,答案总是 1。

任何想法都会有所帮助!

4

2 回答 2

0

您的 if/then 表达式应该具有类似的类型。这是一个可能对您有所帮助的快速示例。

fun how_many_evens (from,to)=
    let fun count_even (m,count) =
    if m > to then count
        else
        if m mod 2 = 0 then count_even(m+1,count+1)
        else count_even(m+1,count)

    in
        count_even (from,0)
    end
于 2013-10-07T12:41:41.130 回答
0

由于您没有发布整个代码,因此我在这里创建了一个简单的代码:

fun evens(int_list: int list) =
    let fun evens_helper(int_list: int list, times: int) =
    if null int_list
    then times
        else if null (tl int_list)
    then 
        if (hd int_list) mod 2 = 0
        then 1
        else 0
    else if (hd int_list) mod 2 = 0
    then 1 + evens_helper(tl int_list, times + 1)
    else evens_helper(tl int_list, times)
    in evens_helper(int_list, 0)
    end

为了做你需要的事情,最简单的事情是在你的函数中创建一个辅助函数,它与原始函数完全相同,但多了一个参数(你的计数器)。如果您的计数器应该被激活,那么您使用计数器 +1 调用递归调用。如果您不想被激活,请使用相同的计数器值调用递归函数。

如果你还没有得到它,发布你的整个代码,所以我可以看到它。

于 2013-10-07T21:50:31.557 回答