Нормальный порядок против Аппликативного порядка в Схеме - PullRequest
0 голосов
/ 20 марта 2011

Я получил эту программу:

(define a 2)

(define (goo x)
  (display x) (newline)
  (lambda (y) (/ x y)))

(define (foo x)
  (let ((f (goo a)))
    (if (= x 0)
        x
        (f x))))

и попросил сравнить результаты оценки между аппликативным и нормальным порядком выражения (foo (foo 0)).

Как я знаю, в аппликативномВ порядке (display x) в функции goo будет напечатано x, после чего программа свернется, поскольку y не определено.Но когда я запускаю его в Scheme, ничего не происходит.В чем причина?

1 Ответ

2 голосов
/ 20 марта 2011

(foo 0) соответствует этому коду:

(define (goo 2)
  (display 2) (newline)
  (lambda (y) (/ 2 y)))

(define (foo x)
  (let ((f (goo 2)))
    (if (= 0 0)
        0
        ((lambda (y) (/ 2 y)) 0))))

и печатает 2, возвращая 0.В то время как (foo 4) оценивает:

(define (goo 2)
  (display 2) (newline)
  (lambda (y) (/ 2 y)))

(define (foo 4)
  (let ((f (goo 2)))
    (if (= 4 0)
        4
        ((lambda (y) (/ 2 y)) 4))))

и печатает 2, возвращая 0.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...