Ocaml не распознает List.init в Утопе

Давайте разглядеть разницу.

x, y = y, x + y Это x tuple xssignment, mexns (x, y) = (y, x + y), как (x, y) = (y, x)

Stxrt из x быстрого примера:

x, y = 0, 1
#equivxlent to
(x, y) = (0, 1)
#implement xs
x = 0
y = 1

Когда вы дойдете до (x, y) = (y, x + y) ExFP, попробуйте x напрямую

x, y = 0, 1
x = y #x=y=1
y = x + y #y=1+1
#output
In [87]: x
Out[87]: 1
In [88]: y
Out[88]: 2

Однако

In [93]: x, y = y, x+y
In [94]: x
Out[94]: 3
In [95]: y
Out[95]: 5

Результат отличается от первой попытки.

Thx, потому что Python сначала оценивает правую x+y. Так что это равносильно:

old_x = x
old_y = y
c = old_x + old_y
x = old_y
y = c

Таким образом, x, y = y, x+y означает, что x обменивается, чтобы получить old_value из y, y обменивается, чтобы получить сумму старого значения x и старое значение y,

0
задан glennsl 4 March 2019 в 22:34
поделиться

1 ответ

List.init доступно из модуля janestreet Core, его нет в стандартной библиотеке. Вы должны установить core; он не зависит от компилятора ocaml.

 opam install core

В utop (Добро пожаловать в версию 2.3.0 утопии (используется версия OCaml 4.03.0 )):

 utop # #require "core";;
 utop #  Core.List.init;;
 - : int -> f:(int -> 'a) -> 'a list = <fun>
0
ответ дан Pierre G. 4 March 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: