#:g1: GOOでL-99 (P07 リストの平坦化)

Posted 2008-04-07 21:38:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
flattenは、恐らくリストにしか使わないので、総称関数ではなく普通の関数にしてみました。
リストかどうかを判定する関数が見付からなかったのでlst?を作成。
また、GOOでは、引数の指定で戻り値の型をDylanのような記法で明記することができるので折角なので使ってみました。
pairはCL/Schemeでいうところのconsなのですが、GOOは慣例的な名前を悉く否定しているとしか思えません(笑)

(flatten '(1 () 2 3 4 5 6 ((7((((())))))) (8)))
;=> (1 2 3 4 5 6 7 8)

(df flatten (u|<lst> => <lst>) (cond ((nul? u) () ) ((lst? (head u)) (cat (flatten (head u)) (flatten (tail u)))) (#t (pair (head u) (flatten (tail u))))))

(df lst? (u|<any> => <log>) (subtype? (class-of u) <lst>))

comments powered by Disqus