2016-11-15 83 views
0

我建立一个功能:ML - 反转一个字符串;

val recur = fn : string * int -> string; 

它得到一个字符串,它的大小,并返回它扭转;

但有点不为我工作,我建的,任何人可以点我的问题,也许给一点修正:

fun recur (s:string, sz:int) = if sz = 1 then substring(s,sz-1,sz-1) else substring(s,sz-1,sz-1)^recur(s,sz-1); 

它应该做的工作,但例如用于操作:

recur("ab",2); 

它仅返回“b”

回答

0

substring的第二个参数是起始索引,第三个参数是您想要的长度。

sz = 1,substring(s,sz-1,sz-1)substring(s,0,0),这是空字符串。

递归中存在类似的问题,因为您可能会尝试采取比可能更多的字符。
你只想要一个一个字符子每次:

fun recur (s:string, sz:int) = if sz = 1 
           then substring(s, 0, 1) 
           else substring(s, sz-1, 1)^recur(s, sz-1); 

字符串操作往往更容易,如果要转换为字符的列表,但:

fun recur (s:string) = String.implode(List.rev(String.explode s));