kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Reasoned Schemer (49) 10章 nevero

(define (nevero) (lambda (s) (lambda () ((nevero) s))))

これはminikanren言語じゃないよね

動かしても関数が返ってくるだけなのでわかりづらい

> nevero
#<procedure:nevero>
> (nevero)
#<procedure:...r/minikanren.scm:52:17>
> ((nevero) empty-s)
#<procedure:...r/minikanren.scm:52:29>

しかたないので人間evalをやる

  (nevero)
= (lambda (s) (lambda () ((nevero) s)))

((nevero) empty-s) = ((lambda (s) (lambda () ((nevero) s))) empty-s) = (lambda () ((nevero) empty-s)) (((nevero) empty-s)) = ((lambda () ((nevero) empty-s))) = ((nevero) empty-s) ((((nevero) empty-s))) = (((nevero) empty-s)) = ((nevero) empty-s)

てわけか

> (((nevero) empty-s))
#<procedure:...r/minikanren.scm:52:29>
> ((((nevero) empty-s)))
#<procedure:...r/minikanren.scm:52:29>

まあそういうことだろう

neveroは評価するとgoalを返すからrelation
(nevero)はstreamに適用するとsubstitutionを返すからgoal
((nevero) empty-s)はsubstitutionのstreamで全体がsuspension
((nevero) empty-s)を何度評価してもsuspension

てことで