Реализация ф-ций CONS, CAR, CDR (Sheme,CLisp)

Узнай цену своей работы

Формулировка задачи:

В книге SICP описан алгоритм реализации функций CONS,CAR,CDR на языке Sheme
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))
Вот как я реализовал в CLisp
(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 Что-то типа этого
(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))
Но тут что-то не то. Как вызвать dispatch из cons,вызвать cons из car или cdr

Решение задачи: «Реализация ф-ций CONS, CAR, CDR (Sheme,CLisp)»

textual
Листинг программы
(defn f-cons (x y) 
    lambda (m)
        cond (= m 0) x
             (= m 1) y
             "Аргумент не 0 или 1")

Объяснение кода листинга программы

  1. Создается определение функции (defn) с именем f-cons
  2. В определении функции указываются два аргумента (x и y)
  3. В теле функции используется специальная форма lambda для создания анонимной функции
  4. Внутри анонимной функции используется конструкция cond для проверки значения аргумента m
  5. Если m равно 0, то возвращается значение x
  6. Если m равно 1, то возвращается значение y
  7. Если m не равно 0 или 1, то выводится сообщение Аргумент не 0 или 1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы