Форум программистов, компьютерный форум, киберфорум
dserp18
Войти
Регистрация
Восстановить пароль
Оценить эту запись

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

Запись от dserp18 размещена 05.11.2016 в 11:34
Обновил(-а) dserp18 07.11.2016 в 00:40

В книге SICP описан алгоритм реализации функций CONS,CAR,CDR на языке Sheme
Lisp
1
2
3
4
5
6
7
8
(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))
Вот как это реализуется в Common Lisp
Lisp
1
2
3
4
5
6
7
8
9
10
(defun cons(x y) 
(defun dispatch (m)
(cond 
((= m 0) x)
((= m 1) y)
( "Аргумент не 0 или 1")
))
)
(defun car(z)(funcall z 0))
(defun cdr(z)(funcall z 1))
Так реализуется в Clojure
Lisp
1
2
3
4
5
6
7
8
(defn f-cons [x y] 
    (defn dispatch [m]
     (condp = m 
      0 x
      1 y
      "Аргумент не 0 или 1")))
(defn f-car [z](z 0))
(defn f-cdr [z](z 1))
Отличия реализаций заключаются в том, что в Common Lisp и Clojure не надо писать название внутренней ф-ции в конце основной (функция dispatch), но вызов ф-ции в Common Lisp производится с помощью конструкции funcall.

В Haskell механизм передачи сообщений работает так:
Lisp
1
2
3
4
5
6
7
Prelude> let mess x = (x 1)
Prelude> let add100 x = x + 100
Prelude> print(mess add100)
101
Prelude> let foo x = \y -> x+y
Prelude> print(mess foo(1000))
1001
Размещено в Без категории
Показов 420 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.