リストの平坦化

http://www.geocities.jp/m_hiroi/func/scheme01.html
リストの平坦化(記法はlambdaを使ったものに変更してあります)

(define flatten
  (lambda (ls)
    (cond ((null? ls) '())
          ((pair? ls) (append (flatten (car ls)) (flatten (cdr ls))))
          (else (list ls)))))

平坦化するリスト
((((#\h #\t #\u . #\v) . #\t) (((#\o . #\d) #\m . #\w) (#\z . #\j) #\w . #\g) *1


実行
gosh> (flatten '((((#\h #\t #\u . #\v) . #\t) (((#\o . #\d) #\m . #\w) (#\z . #\j) #\w . #\g) *2


平坦化されたリスト
(#\h #\t #\u #\v #\t #\o #\d #\m #\w #\z #\j #\w #\g #\l #\c #\r #\x #\c #\o #\c #\k #\l #\y #\z #\t #\a #\h #\h #\g #\n)


なるほどねぇ、appendで繋がないとダメというわけですか。
半日自分で考えて答えが出なかった。
午前中からぐぐって見ればよかったなぁ。

それから、個体の適合度を評価するにはハミング距離ではなく、レーベンシュタイン距離を実装する必要がありそう。

*1:#\l . #\c) #\r . #\x) #\c #\o . #\c) ((#\k . #\l) (#\y #\z . #\t) . #\a) #\h #\h #\g . #\n

*2:#\l . #\c) #\r . #\x) #\c #\o . #\c) ((#\k . #\l) (#\y #\z . #\t) . #\a) #\h #\h #\g . #\n