我在尝试在内部 foldl 调用中增加我的 x 值时遇到问题。我使 x 等于传入的 shiftValue 并尝试在内部 foldl 调用中找到 #" " 或 #"*" 时将其递增,但返回的 x 的值始终与传入时的 shiftvalue 相同.
该函数接受一个 (string, int) 元组,其中字符串将在任何其他字符之前有前导空格和星号被切掉。此外,末尾没有任何其他字符的任何空格或星号都将被切掉。传入的 int 是一个 shiftValue,它跟踪字符串在传递到此函数之前已移动了多少个空格。每当我去掉前导空格或星号时,我都需要将 shiftValue "x" 加一。
内部 foldl 调用从前面删除星号和空格。外部 foldl 调用将它们从后面删除。星号和空格被正确删除,x 值没有得到更新。
(*Take string str and get rid of leading and following #"*"s and #" "s. For every
leading #"*" or #" " removed increment the shiftValue returned in the tuple*)
fun trimStarsOnNode (str, shiftValue) =
let
val x = shiftValue
in
((implode(rev (foldl (fn (cur, a) =>
if length a = 0 andalso cur = #"*" then a @ []
else
if length a = 0 andalso cur = #" " then a @ []
else a @ [cur]) [] (rev (foldl (fn (cur, a) =>
if length a = 0 andalso cur = #"*" then (x = x + 1; a @ [])
else
if length a = 0 andalso cur = #" " then (x = x + 1; a @ [])
else a @ [cur]) [] (explode str)))))), x)
end;
trimStarsOnNode ("***hello", 3);
(* 应该打印出 ("hello", 6) *) 但打印出("hello", 3)