use*_*728 1 iteration translation tail-recursion sml translate
这是我的任务.
我一直在和导师一起工作,这是我们迄今为止所提出的.
fun mult(a,b) =
let
val product = 0
in
if (a = 0) then
0
else
while a > 0 do
(
product := product + b;
if (a = 1) then
product
else
a:= a -1
);
end;
; //the function did not run at end;, so we added these two semicolons below
;
Run Code Online (Sandbox Code Playgroud)
输出是:
stdIn:102.11-103.6 Error: syntax error: deleting SEMICOLON END SEMICOLON
Run Code Online (Sandbox Code Playgroud)
在过去的两周里我才被介绍给SML而且我无法理解它.很感谢任何形式的帮助.
你需要两个(可变的)引用变量; 一个用于产品,一个用于柜台.
像这样的东西:
fun mult(a, b) =
let val product = ref 0
val counter = ref a
in
while !counter > 0 do (
product := !product + b;
counter := !counter - 1
);
!product
end;
Run Code Online (Sandbox Code Playgroud)
(这不完全是您链接的递归代码的翻译,因为该代码不必要地复杂.您可能需要调整,具体取决于您的教授.)
(我会写更像这样的递归版本:
fun mult (0, _) = 0
| mult (_, 0) = 0
| mult (a, b) = b + mult(a - 1, b);
Run Code Online (Sandbox Code Playgroud)
目前还不清楚为什么演习有特殊情况a = 1.)