У меня есть следующая функция, которую я хочу вызвать несколько других функций, используя их возвращаемые значения в качестве параметров для родительской функции.

В настоящее время это работает:

(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
Justin 12 Окт 2013 в 20:49
3
Только не заключайте (A) в круглые скобки: вместо этого используйте (cm-to-m (inches-to-cm (feet-to-inches A))). (A) означает вызов функции с именем A; без скобок это означает использование значения A.
 – 
Will Ness
12 Окт 2013 в 21:37
В свободном доступе есть несколько замечательных книг, которые обучают основам Lisp. Например, cs.cmu.edu/%7Edst/LispBook.
 – 
Rainer Joswig
12 Окт 2013 в 21:39
«Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы». Этот Q делает то, что: он оперирует понятиями вызова функции и цепочки вызовов функций. «Включите попытки решения, почему они не сработали, и ожидаемые результаты». он делает именно это: включает попытку кода. Не хватает только сообщения об ошибке. Так что ИМХО этот Q закрывать не надо.
 – 
Will Ness
12 Окт 2013 в 21:41
Что случилось, когда вы это попробовали? Кроме того, если (feet-to-inches A) уже работает, зачем вам менять его на (feet-to-inches (A)) во втором случае?
 – 
Joshua Taylor
12 Окт 2013 в 22:04
Ness: вызовы вложенных функций доступны во многих популярных языках программирования. Каждое вступление к Лиспу затрагивает это. Он уже проигнорировал, что использовал необъявленные переменные, хотя SBCL пожаловался бы на это.
 – 
Rainer Joswig
12 Окт 2013 в 22:17

1 ответ

Лучший ответ

Ваш код должен работать почти как есть. Вам просто нужно убрать скобки вокруг A. Ваша интуиция верна, это именно та парадигма, которую должны использовать функциональные языки, такие как Lisp. Первый пример, который вы привели, больше касается написания кода на императивном языке, таком как Java, C ++ и т. Д.

(defun feet-to-m (A)
    (cm-to-m (inches-to-cm (feet-to-inches A))))
2
Danny 12 Окт 2013 в 21:39