F# F“与”一起失败;错误 ;4 ;此表达式的类型应为int,但此处的类型为int->;int";

F# F“与”一起失败;错误 ;4 ;此表达式的类型应为int,但此处的类型为int->;int";,f#,functional-programming,F#,Functional Programming,下面是我试图使用的代码最后一行是它失败的地方: let rec gcd a b = if b= 0 then a else gcd b (a % b);; let n = 8051 let mutable d = 0 let mutable c = 1 let mutable xi = 2 let mutable yi = 2 let f x = (pown x 2) + (c % n);; while c < 100 do whi

下面是我试图使用的代码最后一行是它失败的地方:

let rec gcd a b =
    if b= 0 then
        a
    else
        gcd b (a % b);;

let n = 8051
let mutable d = 0
let mutable c = 1
let mutable xi = 2
let mutable yi = 2
let f x = (pown x 2) + (c % n);;
while c < 100 do
    while d = 1 do
        xi <- (f xi)
        yi <- (f(f(yi)))
        printfn "%d%d" xi yi        
        d <- gcd(abs (xi - yi) n)
让rec gcd a b=
如果b=0,则
A.
其他的
gcd b(a%b);;
设n=8051
设可变d=0
设可变c=1
让可变的席=2
设可变yi=2
设fx=(功率x2)+(c%n);;
当c<100时
当d=1时
那么席艺)
试席:

d int而不是int本身。用括号括起来会导致在gcd查看abs之前执行abs。这会使gcd看到abs的结果,而不是abs本身。

尝试:


d int而不是int本身。用括号括起来会导致在gcd查看abs之前执行abs。这导致gcd看到的是abs的结果,而不是abs本身。

除了@Rangoric指出的以外,外括号也必须去掉,否则currying将不起作用:

d <- gcd (abs(xi-yi)) n

d除了@Rangoric指出的内容外,外括号也必须加上,否则咖喱菜不起作用:

d <- gcd (abs(xi-yi)) n

dYikes,这里是一些未经请求的提示(@BrokenGlass正确地回答了问题本身)

首先,您可以在一行中分配所有这些可变项:

let mutable d, c, xi, yi = 0, 1, 2, 2
第二,在括号中放轻松:

xi <- f xi
yi <- f (f yi)

xiYikes,这里有一些未经请求的提示(@BrokenGlass自己正确地回答了问题)

首先,您可以在一行中分配所有这些可变项:

let mutable d, c, xi, yi = 0, 1, 2, 2
第二,在括号中放轻松:

xi <- f xi
yi <- f (f yi)

xi我在发布之前尝试过,但不起作用:(我得出结论,它返回的是一个函数而不是一个值。我尝试了以下操作:d删除了paren,这是我没有首先尝试的结果。我在发布之前尝试过,但不起作用:(我得出的结论是,它返回的是一个函数而不是一个值。我尝试了以下操作:d删除了参数,这就是我没有首先尝试的结果。我认为您永远不会执行最后一行,因为您将d初始化为0,但在d=1时执行
:)有趣的是,他不会经常内联地执行最后一行,因为c永远不会更改,所以仍然是1,这是<100我认为您永远不会执行最后一行,因为您将d初始化为0,但在d=1时执行
:)有趣的是,他不会经常内插执行最后一行,因为c永远不会更改,所以仍然是1,这是<100,这是我缺少的!谢谢这是我缺少的!谢谢