ML - 反转弦;

时间:2016-11-15 18:01:50

标签: string 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”

1 个答案:

答案 0 :(得分: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));