leftmost は空リストを含まない空リストの中で最も左にあるアトムを返す。
この関数は今までの関数とはちょっと違う。最も左のアトムを返すのだから (car l)
でだけ再帰する。もう一つ、「空リストを含まない空リスト」という条件がついているから、必ずアトムが見つかるはず、言い換えると atom?
が最終条件となる。
それじゃ書いてみよう。
(use mymodule) (define leftmost (lambda (l) (cond ((atom? (car l)) (car l)) (else (leftmost (car l)))))) (print (leftmost '((potato) (chips ((with) fish) (chips))))) (print (leftmost '(((hot) (tuna (and))) cheese)))
実行:
^o^ > gosh -I. leftmost.scm potato hot