Реализация основных функций библиотеки в LISP (вручную) - PullRequest
2 голосов
/ 18 ноября 2010

Есть ли способ определить функции my_list, my_cons, my_append, которые выполняют функции, аналогичные list, cons и append соответственно?

В противном случае, где я могу найти реализацию этих функций?

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Для my_list и my_append возможны следующие решения:

(defun my_list (&rest arguments)
    `(,@arguments)
)

(defun my_append (a_list an_item)
    `(,@a_list ,an_item)
)

(my_append (my_list 'a 'b 'c) 'd)

Я, вероятно, ошибаюсь, но я не знаю альтернативного метода для создания пар, поэтому альтернатива "против" не представляется возможной. Тем не менее, я довольно новичок в мире LISP.

0 голосов
/ 18 ноября 2010

Если вы хотите, чтобы ваши списки были такими же, как у нативных для вашего приложения, вы должны начать с некоторого примитива, чтобы составить минусы, возможно, минусы или пунктирную пару, и что-то, чтобы разделить ячейку минусов (машина CADR). Другие могут быть построены из этого.

Если вы хотите заново реализовать вещи, которые функционально (каламбур) эквивалентны, см. http://en.wikipedia.org/wiki/Cons#Not_technically_fundamental

...