Я прежде всего C++ (, поэтому программирую объектно-ориентированный/императивный ), и я нахожу довольно странным, что у вас может быть только один оператор на оценку в условном операторе, таком как оператор if -в схеме, функциональный язык.
Например:
(let ((arg1 0) (arg2 1))
(if (> arg1 arg2)
arg1
arg2)))
Ошибочный пример:
(let ((arg1 0) (arg2 1))
(if (> arg1 arg2)
(arg1 (display "cool"))
(arg2 (display "not cool"))))
выдает мне ошибку вида "процедура приложение :ожидаемая процедура, учитывая :2; аргументы были:#пустота"
Это можно решить, поместив указанный условный оператор в разные операторы в теле определенной функции, например, с телом условного оператора, каждый раз имеющим отдельные операторы следующим образом:
(if (condition) statement1a statement2a)
(if (condition) statement1b statement2b)
и так далее...
Само собой разумеется, что это не слишком практично. Не говоря уже о дублированном коде.
Я что-то пропустил здесь или действительно нет другого пути?