JavaScript で scheme インタプリタを実装するというネタを見たのも何かの縁ということで、これを契機に自分も今年こそ scheme と JavaScript をなんとか読み書きできるレベルにまではなろうと思って、ひそかに もうひとつの Scheme 入門 とか自習してみているのだが、5. 分岐の練習問題 2 の and を使った問題で目からうろこというかなんと言うか。
問題は
次の関数を作ってください。
- 与えられた3つの実数が全て正ならその積を返す関数
で解答例が
(define (pro3and a b c) (and (positive? a) (positive? b) (positive? c) (* a b c)))
なんだけど、手元の guile で試してみると、
guile> (pro3and 2 3 4) 24 guile> (pro3and 2 3 -4) #f
となる。C 言語とかに慣れてると、入力値によって、返る値の型が違う感じがして気持ち悪いんだけど、scheme だとこういうのが自然な解法の考え方なんだろうなと思った。