【发布时间】:2020-05-14 06:34:09
【问题描述】:
我是 F# 的新手,从本科开始就没有做过函数式编程,但我一直在尝试自学。我写了一个朴素的递归扩展欧几里得实现,它工作得很好,现在我再次尝试,但有延续。
我用一个小例子手动浏览了两次代码并得到了正确的答案,但是当我通过解释器运行它时,我没有得到相同的结果,所以我显然误解了我正在尝试做的事情。
我手动运行了 eea 7 3,我计算的(正确)结果是 (1, 1, -2)
但是当我在解释器中运行它时,我得到了
eea 7 3;;
val it : int * int * int = (1, 0, 1)
这是我的实现:
let eea a b =
let rec contEEA a b f =
match b with
| 0 -> f () (a,1,0)
| _ ->
contEEA b (a%b) (fun () t ->
let (d,x',y') = t
(d, y', x'-(y'*(a/b)))
)
contEEA a b (fun () t -> t)
直接来自教科书的幼稚方法供参考
let rec eea_gcd a b =
match b with
| 0 -> (a, 1, 0)
| _ ->
let d, x', y' = eea_gcd b (a % b)
(d, y', x'-(y'*(a/b)))
【问题讨论】:
标签: functional-programming f# continuations