При реализации языковых структур данных вам необходимо предоставить конструкторы и методы доступа, соответствующие договору:
(car (cons 1 2)) ; ==> 1
(cdr (cons 1 2)) ; ==> 2
(pair? (cons 1 2)) ; ==> 2
Вот пример:
(define (cons a d)
(vector a d))
(define (car p)
(vector-ref p 0))
(define (cdr p)
(vector-ref p 1))
Теперь, если вы сделаетеВ реализации вы должны реализовать read
, чтобы соответствовать этому способу создания пар, чтобы '(1 2 3)
создавал правильную структуру данных; простые правила, приведенные выше, остались прежними.
Глядя на car
Я представляю cons
выглядит так:
(define (cons a d)
(lambda (p) (p a d)))
Работает с замыканиями.Теперь реализация Scheme с помощью стекового компьютера будет анализировать код для свободных переменных, живущих вне их области видимости, и, таким образом, создавать их в виде блоков.Замыкания, содержащие a
и d
, мало чем отличаются от векторов.
Я призываю вас реализовать минималистический интерпретатор Scheme.Сначала в Схеме, так как вы можете использовать основной язык, затем другой, чем язык лиспа.Вы даже можете сделать это на эзотерическом языке , но это очень много времени.