Реализация ф-ций 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д