Реализация ф-ций CONS, CAR, CDR (Sheme,CLisp)
Формулировка задачи:
В книге SICP описан алгоритм реализации функций CONS,CAR,CDR на языке Sheme
Вот как я реализовал в CLisp
Но, наверное, этот же алгоритм можно реализовать с помощью глобальных переменных defvar
Что-то типа этого
Но тут что-то не то. Как вызвать dispatch из cons,вызвать cons из car или cdr
Листинг программы
- define (cons x y)
- (define (dispatch m)
- (cond ((= m 0) x)
- ((= m 1) y)
- (else (error "Аргумент не 0 или 1 -- CONS" m))))
- dispatch)
- (define (car z) (z 0))
- (define (cdr z) (z 1))
Листинг программы
- (defun cons(x y)
- (defun dispatch (m)
- (cond
- ((eq m 0) x)
- ((eq m 1) y)
- ((and(not (eq m 1))(not(eq m 0))) "Аргумент не 0 или 1")
- ))
- )
- (defun car(z)(funcall z 0))
- (defun cdr(z)(funcall z 1))
Листинг программы
- (defvar m 0)
- (defvar x 0)
- (defvar y 0)
- (defun dispatch (m)
- (cond
- ((= m 0) x)
- ((= m 1) y)
- ((> m 1) "Arg is not 0 or 1")
- ))
- (defun cons(x y) (dispatch m))
- (defun car(z)(funcall z 0))
- (defun cdr(z)(funcall z 1))
Решение задачи: «Реализация ф-ций CONS, CAR, CDR (Sheme,CLisp)»
textual
Листинг программы
- (defn f-cons (x y)
- lambda (m)
- cond (= m 0) x
- (= m 1) y
- "Аргумент не 0 или 1")
Объяснение кода листинга программы
- Создается определение функции (defn) с именем f-cons
- В определении функции указываются два аргумента (x и y)
- В теле функции используется специальная форма lambda для создания анонимной функции
- Внутри анонимной функции используется конструкция cond для проверки значения аргумента m
- Если m равно 0, то возвращается значение x
- Если m равно 1, то возвращается значение y
- Если m не равно 0 или 1, то выводится сообщение
Аргумент не 0 или 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д