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

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

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

В книге SICP описан алгоритм реализации функций CONS,CAR,CDR на языке Sheme
Листинг программы
  1. define (cons x y)
  2. (define (dispatch m)
  3. (cond ((= m 0) x)
  4. ((= m 1) y)
  5. (else (error "Аргумент не 0 или 1 -- CONS" m))))
  6. dispatch)
  7. (define (car z) (z 0))
  8. (define (cdr z) (z 1))
Вот как я реализовал в CLisp
Листинг программы
  1. (defun cons(x y)
  2. (defun dispatch (m)
  3. (cond
  4. ((eq m 0) x)
  5. ((eq m 1) y)
  6. ((and(not (eq m 1))(not(eq m 0))) "Аргумент не 0 или 1")
  7. ))
  8. )
  9. (defun car(z)(funcall z 0))
  10. (defun cdr(z)(funcall z 1))
Но, наверное, этот же алгоритм можно реализовать с помощью глобальных переменных defvar Что-то типа этого
Листинг программы
  1. (defvar m 0)
  2. (defvar x 0)
  3. (defvar y 0)
  4. (defun dispatch (m)
  5. (cond
  6. ((= m 0) x)
  7. ((= m 1) y)
  8. ((> m 1) "Arg is not 0 or 1")
  9. ))
  10. (defun cons(x y) (dispatch m))
  11. (defun car(z)(funcall z 0))
  12. (defun cdr(z)(funcall z 1))
Но тут что-то не то. Как вызвать dispatch из cons,вызвать cons из car или cdr

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

textual
Листинг программы
  1. (defn f-cons (x y)
  2.     lambda (m)
  3.         cond (= m 0) x
  4.              (= m 1) y
  5.              "Аргумент не 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы