Недавно я начал читать через Пола Грэма На Lisp с другом, и мы поняли, что у нас очень разные мнения о сокращении: я думаю, что он выражает определенную рекурсивную форму очень четко и кратко; он предпочитает явно выписывать рекурсию.
Я подозреваю, что мы в любом случае правы в некотором контексте и ошибаемся в другом, но мы не знаем, где находится эта строка. Когда вы выбираете одну форму над другой, и что вы думаете о ее выборе?
Чтобы быть понятным, что я подразумеваю под сокращением против явной рекурсии, здесь одна и та же функция реализована дважды:
(defun my-remove-if (pred lst)
(fold (lambda (left right)
(if (funcall pred left)
right
(cons left right)))
lst :from-end t))
(defun my-remove-if (pred lst)
(if lst
(if (funcall pred (car lst))
(my-remove-if pred (cdr lst))
(cons (car lst) (my-remove-if pred (cdr lst))))
'()))
Я боюсь, что начал работу с Schemer (теперь мы Racketeers?), поэтому, пожалуйста, дайте мне знать, если я испортил синтаксис Common Lisp. Надеемся, что это будет ясно, даже если код неверен.