私は主に C++ (したがって OO/命令型) プログラマーですが、関数型言語である Scheme の if ステートメントなどの条件ステートメントで、評価ごとにステートメントを 1 つしか持てないのは非常に奇妙です。
例えば:
(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)
等々...
あまり実用的でないことは言うまでもありません。重複コードのオーバーヘッドは言うまでもありません。
ここで何か不足していますか、それとも他に方法はありませんか?