2
我相信我在将我的第一个函数转换为仅使用赋值和循环方面处于正确的轨道。我知道这是针对函数式编程,但这正是教授想要的。SML - 列表替换函数的迭代翻译
递归函数:
fun sub (x, y, []) = []
| sub (x, y, z::zz) = if x = z then y::sub(x, y, zz)
else z::sub(x, y, zz);
迭代翻译:
fun sub2 (x, y, z) =
let val ret = ref []; val temp = z;
in
while !temp <> []
do (if x = hd(!temp) then ret := !ret::y; temp := tl(!temp)
else ret := ret::hd(!temp); temp := tl(!temp));
!ret;
end;
我收到smlnj运行下面的错误。第一个与do相符,第二个在结尾。
Error: syntax error: replacing END with EQUALOP
Error: syntax error found at EOF
我很感谢帮助调试,或者更清晰的方式来完成这种迭代功能。
哇谢谢你。这些例子提供了很多。课堂上以一种奇怪的方式进行缩进和分号的使用。你介绍的不同功能将为我提供极大的帮助。谢谢。 – Joel 2011-03-07 16:22:58