substとsubst2

続いて、subst と subst2。これは答えを見ちゃった。だって隣に書いてあるんだもの。
ただ、二重の cond は冗長だからひとつにまとめたものを書いた。

subst

(subst new old lat) は lat の中の最初の old を new に置き換える。

(define subst
  (lambda (new old lat)
    (cond
      ((null? lat) (quote ()))
      ((eq? (car lat) old) (cons new (cdr lat)))
      (else (cons (car lat) (subst new old (cdr lat)))))))

実行例:

gosh> (subst 'topping 'fudge '(ice cream with fudge for dessert))
(ice cream with topping for dessert)

subst2

(subst2 new o1 o2 lat) は lat の中の最初の o1 または o2 を new に置き換える。

(define subst2
  (lambda (new o1 o2 lat)
    (cond
      ((null? lat) (quote ()))
      ((or (eq? (car lat) o1) (eq? (car lat) o2)) (cons new (cdr lat)))
      (else (cons (car lat) (subst2 new o1 o2 (cdr lat)))))))

実行例:

gosh> (subst2 'vanilla 'chocolate 'banana '(banana ice cream with chocolate topp
ing))
(vanilla ice cream with chocolate topping)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください