2016-11-15 56 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));