計算機プログラムの構造と解釈 第二版 P63 問題2.28
題意としては、
・リストの中にリストがはいってたとしても、平坦にして出力しちゃうような手続きfringeを書く。
たとえば、
((1 2 3) (4 5) (6 (7 8)) 9)
みたいなリストがあったときに
(1 2 3 4 5 6 7 8 9)
ってりすとが返ってくる手続きを作ればいい。
んで実装。
#!/usr/local/bin/gosh ;; -*- coding: utf-8 -*- (define nil '()) (define x (list (list 1 2) (list 3 4))) (define (fringe items) (if (pair? items) (if (pair? (car items)) (append (fringe (car items)) (fringe (cdr items))) (cons (car items) (fringe (cdr items)))) items)) ;; main (define (main args) (display "x: ") (display x) (newline) (display "(fringe x): ") (display (fringe x)) (newline) 0)
実行
x: ((1 2) (3 4)) (fringe x): (1 2 3 4)
できた。