Ну, я думаю, хорошее эмпирическое правило будет быть: использовать, если вы не можете использовать funcall: последний более ясный, но также менее общий, чем применяется, поскольку он не позволяет вам вызывать функцию, число аргументов которой известно только во время выполнения.
Конечно, это только хорошая практика, и вы могли бы систематически делать это уродливый путь (систематически используя плату), но, как вы, вероятно, заметил, используя уродливый путь, когда очень похож, но уборщик способ доступен в не очень распространенный-lisp-y.
Пример функции, которая должна применяться вместо FUNCALL: могли бы вы реализуете карту таким образом, что (map #'+ '(1 2) '(2 3))
и (map #'+ '(1 2) '(2 3) '(3 4))
оба работают (как в случае со стандартной функцией) без использования применяются (или Eval, который изменяет) ?
EDIT: а также было отмечено, что было бы глупо писать: (funcall func (first list) (second list) (third list) etc.)
вместо (apply func list)
.