Я читаю чисто функциональные структуры данных Криса Окасаки, и есть один пример, с которым у меня проблемы. Он расположен здесь . В частности, я не понимаю, как работают функции rotate
и exec
:
fun rotate($Nil, y::_, a) = $Cons (y, a)
| rotate ($Cons (x, xs), y :: ys, a) =
$Cons(x, rotate (xs, ys, $Cons (y, a)))
fun exec (f, r, $Cons (X, s)) = (f, r, s)
| exec (f, r, $Nil) = let val f' = rotate (f, r, $Nil) in (f', [], f') end
Может ли кто-нибудь выразить это глупо? Я все еще изучаю свои языки на основе ML. : -)