Давайте разглядеть разницу.
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
,
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>