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