Код: Выделить всё
[adav@localhost ~]$ petite
Petite Chez Scheme Version 8.2
Copyright (c) 1985-2010 Cadence Research Systems
> (define (mycons x y)
(lambda (m) (m x y)))
> (define (mycar z)
(z (lambda (p q) p)))
> (define (mycdr z)
(z (lambda (p q) q)))
> (mycar (mycons 1 (mycons 2 (mycons 3 4))))
1
> (mycar (mycdr (mycons 1 (mycons 2 (mycons 3 4)))))
2
> (mycar (mycdr (mycdr (mycons 1 (mycons 2 (mycons 3 4))))))
3
> (mycdr (mycdr (mycdr (mycons 1 (mycons 2 (mycons 3 4))))))
4
>
[adav@localhost ~]$ clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8
Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>
Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2010
Type :h and hit Enter for context help.
[1]> (defun mycons (x y)
(lambda (m) (m x y)))
MYCONS
[2]> (defun mycar (z)
(z (lambda (p q) p)))
MYCAR
[3]> (defun mycdr (z)
(z (lambda (p q) q)))
MYCDR
[4]> (mycar (mycons 1 (mycons 2 (mycons 3 4))))
*** - EVAL: undefined function Z
The following restarts are available:
USE-VALUE :R1 Input a value to be used instead of (FDEFINITION 'Z).
RETRY :R2 Retry
STORE-VALUE :R3 Input a new value for (FDEFINITION 'Z).
ABORT :R4 Abort main loop
Break 1 [5]>
[6]>
в связи с этим вопрос:
1) почему работает в Scheme и не работает в Lisp?
2) почему работает в Scheme? что такое (z) и откуда Scheme знает, что должно получиться, н̶е̶ ̶в̶ы̶ч̶и̶с̶л̶я̶я̶ ̶z̶?
EDIT z вычисляется. это унарная функция, которую возвращает cons и которая должна вызвать переданную ей car или cdr бинарную функцию, которая возвращает один из своих аргументов. как-то так
