Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smlnj 检查输入是否为斐波那契数 fun-isfib(a)= FindFB(a,1,1) 和 FindFB(b、x、y)= val z=x+y 如果b,则为false 否则,如果z=b,则为真 else-fib(b,y,z)_Smlnj_Ml - Fatal编程技术网

Smlnj 检查输入是否为斐波那契数 fun-isfib(a)= FindFB(a,1,1) 和 FindFB(b、x、y)= val z=x+y 如果b,则为false 否则,如果z=b,则为真 else-fib(b,y,z)

Smlnj 检查输入是否为斐波那契数 fun-isfib(a)= FindFB(a,1,1) 和 FindFB(b、x、y)= val z=x+y 如果b,则为false 否则,如果z=b,则为真 else-fib(b,y,z),smlnj,ml,Smlnj,Ml,我把一个输入放到程序中,递归地试图找出这个输入是否是一个fib数。 我可以用两行代码在一个单独的程序中计算fib的第x个位置。但这种“输入,检查是否等于fib,做fib到无穷大或半身像”的逻辑让我非常困惑。在第7.1行中,我也遇到了一些错误,比如“用ANDALSO替换AND”和“插入ORELSE”,这是B我的意思是,在需要相互递归的情况下,应该使用和,在这种情况下,您似乎并不是真的这样做,例如,您可以尝试这样的方法: fun isfib(a) = findfib(a,1,1) and f

我把一个输入放到程序中,递归地试图找出这个输入是否是一个fib数。
我可以用两行代码在一个单独的程序中计算fib的第x个位置。但这种“输入,检查是否等于fib,做fib到无穷大或半身像”的逻辑让我非常困惑。在第7.1行中,我也遇到了一些错误,比如“用ANDALSO替换AND”和“插入ORELSE”,这是B我的意思是,在需要相互递归的情况下,应该使用
,在这种情况下,您似乎并不是真的这样做,例如,您可以尝试这样的方法:

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)
fun fib 0=1
|fib 1=1
|fibn=(fib(n-1))+(fib(n-2));
fun isfib a=
让
如果a=(fib b)则为真,如果a<(fib b)则为假,否则为假,则评估a(b+1)
在里面
评估a(1)
结束;

例如,尝试运行
isfib 5
isfib 6
。不需要无穷大。

如果您试图使用
关键字使用相互递归,您应该首先确保
fib(a,1,1)
调用
fib(b,x,y)
。另外,你也应该给第二个函数取个不同的名字。你是什么意思?请确保fib(a,1,1)调用fib(b,x,y)我可以问一下吗?我尝试将其重命名为findfib(a,1,1),并使用and来定义和findfib(b,x,y)=等。它想用AND替换AND,就好像它的逻辑一样。我知道我必须在val z=x+y上使用let,in,end。我不知道这是必要的,但现在有了意义。非常感谢。现在是我的代码词,但你的代码词也可以。好的,任何时候你需要定义一个以前没有声明过的“辅助”函数,并且你想在你正在处理的函数中定义它,你都需要
let
语句。我也应该提到这一点。@Anthony Barranco,没问题,但另请注意:您的方法可能更好,因为您创建了一个辅助变量,将当前斐波那契数的结果存储在
val z
中,而不是像我的示例中那样计算两次。
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;