leftmost

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください