#:g1: ArcでL-99 (P54a 二分木かどうかを判定)

Posted 2008-04-02 12:21:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
今回から二分木篇に突入です。番号はどういう訳かいきなり54a。
ここでの二分木とは、(x nil nil)という風に定義し、(根 葉 葉)というリストで表現されるとのことです。
木は根と葉から成り、根はアトム、葉は木から成ります。
それで今回のお題は、二分木になっているかを判定する関数を書けとのこと。

(atree '(1 2 3)) ;=> nil
(atree '(x nil nil)) ;=> t
(atree '(x (x nil nil) (x nil (x nil nil)))) ;=> t
(atree '(x (x nil nil) (x nil (x nil nil x)))) ;=> nil

(def atree (tree) (if atom.tree no.tree 'else (and (is 3 len.tree) (let (root left right) tree (and atom.root root atree.left atree.right)))))

comments powered by Disqus