我正在建立一个功能:
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 :(得分: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));