2010-11-18 2 views
2

Есть ли способ, с помощью которого я могу определить функции my_list, my_cons, my_append, которые выполняют аналогичную функцию list, cons и append соответственно?Реализация основных библиотечных функций в LISP (вручную)

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

Благодаря

ответ

2

Для 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

Можете ли вы дать простое объяснение того, как работают коды. Пожалуйста, –

+0

«означает, что следующий символ, который вы напишете, не будет оценен. Именно так мы создаем список. Это означает, что следующий символ должен быть оценен (может использоваться только после обратного отсчета) @ удаляет элементы из списка/пары, чтобы их перечислять. (Может использоваться только после a) –

+0

и что такое '& 'и' @ '?' & 'является ссылкой? –

0

Если вы хотите, чтобы ваши списки, чтобы быть таким же, как унции родных для вашего приложения, вы должны начать с каким-то примитивом построить минусы, вероятно, минусы или точечно-пару, и что-то тянуть cons cell apart (автомобиль, cadr). Из этого можно строить другие.

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

+0

Это реализация «схемы». Я думаю, что реализация common-lisp будет отличаться. –

+0

Да, но концепции все равно будут применяться –

+0

Да, но можете ли вы просто показать мне, как «cons» можно реализовать без использования 'list' и' append'? Я думаю, что реализация будет более жесткой. –

Смежные вопросы