fun isfib(a) =
findfib(a,1,1)
and
findfib(b,x,y) =
val z = x + y
if b <= 1 then true
else if z > b then false
else if z = b then true
else fib(b,y,z)
我正在向程序中输入一个输入,并递归地试图找出这个输入是否是一个fib数。 我可以在2行中的单独程序中计算fib的第x位。但是这种“输入,检查是否等于无效,对于无限或无效的虚拟”逻辑对我来说是非常困惑的。我也遇到了错误,例如在第7.1行“替换AND ANDAL ANDAL”和“插入ORELSE”,这是B&lt; = 1
答案 0 :(得分:0)
我的意思是你应该在你需要相互递归的情况下使用and
,在这种情况下你似乎并不真的这样做,例如,你可以尝试这样的事情:
fun fib 0 = 1
| fib 1 = 1
| fib n = (fib (n-1)) + (fib (n-2));
fun isfib a =
let
fun eval a b = if a = (fib b) then true else if a < (fib b) then false else eval a (b+1)
in
eval a (1)
end;
尝试运行isfib 5
和isfib 6
。无需无限。