Gauche始めました。

O'reillyの「プログラミング言語Gauche」が面白そうだったの購入。

さっそくやってみる。


関数型言語をまともに勉強するのは初めてだったがなかなか新鮮で楽しい。

ただ練習問題に答えが乗ってなくて困る。

例えば 9章112ページの練習問題

<要素>がみつから無かった場合に一切コピーをしないdelete-1を実装してみてください。

(define (delete-1 elt lis . options)
  (let-optionals* options ((cmp-fn equal?))
    (define (loop lis)
      (cond [(null? lis) '()]
            [(cmp-fn elt (car lis)) (cdr lis)]
            [else (if (eq? (cdr lis) (loop (cdr lis)))
              lis
              (cons (car lis) (loop (cdr lis))))]))
    (loop lis)))


判定のためにループを二回呼んでしまっているがもっといい解法はないものか。

スキーマー脳が欲しいぜ。

■2000/04/30 追記:
解答はサポートページからダウンロードできるよ。っとコメントで教わった。

letに入れるのでよかったのかー。