2014-03-03 24 views
0

我想了解顺序组合的工作原理比我现在在SML中做得好多了。我必须编写一个程序,它接受一个整数列表并将索引零处的整数移动到列表中的最后一个索引处。即。 [4,5,6] - > [5,6,4]。在SML中编写多个函数 - 顺序组合

我现在所拥有的代码是:

- fun cycle3 x = 
= if length(x) = 1 then x 
= else (List.drop(x, 1); 
= x @ [hd(x)]); 
val cycle3 = fn : 'a list -> 'a list 

的问题在于我else语句,我希望发生的第一连接第一任期结束,然后第二次下降的第一项。这似乎很简单,我只是不明白如何使用SML按特定顺序执行多个功能。我的理解是,被调用的第一个函数具有第二个函数的范围,它将具有第三个函数的范围..等等。我在这里做错了什么?

回答

4

SML中的大部分内容都是不可变的 - 您的功能不是修改列表,而是建立一个新列表。 List.drop(x,1)评估为包含x的第一个元素但不修改x的新列表。

要使用你的方法,你的List.drop(x,1)结果绑定到一个变量,如下所示:

fun cycle3 x = if length x = 1 
       then x 
       else let 
         val y = List.drop(x,1) 
        in 
         y @ [hd(x)] 
        end 

或者,这样做同样的事情,更清洁的方式,这也处理的可能性空列表:

fun cycle3 [] = [] 
    | cycle3 (x::xs) = xs @ [x] 
+0

非常感谢,这对我们有很大帮助。我将阅读'in'。再次感谢 –