У меня есть следующая функция, которую я хочу вызвать несколько других функций, используя их возвращаемые значения в качестве параметров для родительской функции.
В настоящее время это работает:
(defun feet-to-m (A)
(setf B (feet-to-inches A))
(setf C (inches-to-cm B))
(setf D (cm-to-m C)))
Мне интересно, имеет ли Lisp возможность вкладывать функции так, чтобы работало следующее, или более эффективный способ сделать это:
(defun feet-to-m (A)
(cm-to-m (inches-to-cm (feet-to-inches (A)))))
1 ответ
Ваш код должен работать почти как есть. Вам просто нужно убрать скобки вокруг A
. Ваша интуиция верна, это именно та парадигма, которую должны использовать функциональные языки, такие как Lisp. Первый пример, который вы привели, больше касается написания кода на императивном языке, таком как Java, C ++ и т. Д.
(defun feet-to-m (A)
(cm-to-m (inches-to-cm (feet-to-inches A))))
Похожие вопросы
Новые вопросы
lisp
Lisp - это семейство языков программирования общего назначения, на которые влияет лямбда-исчисление и которые могут манипулировать исходным кодом как структурой данных.
(A)
в круглые скобки: вместо этого используйте(cm-to-m (inches-to-cm (feet-to-inches A)))
.(A)
означает вызов функции с именемA
; без скобок это означает использование значения A.(feet-to-inches A)
уже работает, зачем вам менять его на(feet-to-inches (A))
во втором случае?