Я новичок в 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)))