Лисп/Рекурсия: различия между версиями

Содержимое удалено Содержимое добавлено
Новая: <div style="max-width:52em;margin:1em auto 0 4%;"> Рекурсия - одна из основ лиспа, в сочетании со списками она хорошо ложится...
 
Нет описания правки
Строка 43:
Ее конструкция очень напоминает new-copy-list. Таких функций можно придумать довольно много. Если вы захотите использовать их в своей программе, то можете написать функцию
<source lang="lisp">
>> (defun template (arg1 &optional arg2 (func #'cons))
>> (defun template (arg1 &optional arg2 (func #'cons)) ; #' - говорим интерпретатору, что следующий за ним аргумент - функционал (функция с заранее ; неизвестными аргументами. Интерпретатор не вычисляет значение функционала, "посаженного за решетку", ; а применяет к нему нужные аргументы (funcall) по нашей просьбе
(if (null arg1)
arg2
Строка 49:
(template (cdr arg1) arg2 func)))) => TEMPLATE
</source>
>> (defun template (arg1 &optional arg2 (func #'cons)) ; #' - говорим интерпретатору, что следующий за ним аргумент - функционал (функция с заранее ; неизвестными аргументами. Интерпретатор не вычисляет значение функционала, "посаженного за решетку", ; а применяет к нему нужные аргументы (funcall) по нашей просьбе.
 
 
вызов template с нужными аргументами позволяет превратить ее в new-copy-list, append или что-то еще (например, такой же вид будет иметь функция для замены, вставки, удаления атомов в списке)
<source lang="lisp">