計算機プログラムの構造と解釈 第二版 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)

できた。