Я в первую очередь программист С++ (таким образом, OO/императив), и я нахожу довольно причудливым, что вы можете иметь только один оператор для оценки в условном выражении, например if-statement в Scheme, функциональном языке.
Например:
(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; аргументы: #void"
Это можно решить, помещая указанный условный оператор в разные операторы внутри тела определенной функции, например, с телом условного оператора, имеющим отдельные инструкции каждый раз следующим образом:
(if (condition) statement1a statement2a)
(if (condition) statement1b statement2b)
и т.д.
Само собой разумеется, что это не слишком практично. Не говоря уже о дублировании служебных данных кода.
Мне что-то не хватает или нет другого пути?