2006/04/07

突っ込みありがとうございます。>Anonymous
サブリストが巡回しているケースということであれば、昨日の「全巡回リストチェックルーチン」を car と cdr についてチェックするように修正すれば大丈夫そうだけど、はたして問題はそこなんだろうかという不安が残る。
;; ex. 3.19
(define (cycle? x)
(define (whole-cycle? sub)
(if (or (null? sub) (not (pair? sub)))
#f
(let R ((y (cdr sub)))
(cond ((null? y) #f)
((eq? sub y) #t)
(else (R (cdr y)))))))
(if (or (null? x) (not (pair? x)))
#f
(or (whole-cycle? (car x))
(whole-cycle? (cdr x)))))

gosh> x
(0 . #0=(1 2 . #0#))
gosh> (cycle? x)
#t

サブリストについては再帰的にチェックしていないので、こうすればまた同じ問題に悩まされる。
gosh> x
(0 . #0=(1 2 . #0#))
gosh> (define z (cons x 4))
((0 . #0=(1 2 . #0#)) . 4)
gosh> (cycle? z)
...

論理的には、こういう再帰的なチェックをすれば解決するのだと思う。or の評価順序の問題があるので、これはもっとどうしょうもなく停止しないけど。
(define (cycle? x)
(define (whole-cycle? sub)
(if (or (null? sub) (not (pair? sub)))
#f
(let R ((y (cdr sub)))
(cond ((null? y) #f)
((eq? sub y) #t)
(else (R (cdr y)))))))
(if (or (null? x) (not (pair? x)))
#f
(or (cycle? (car x)) (whole-cycle? (car x))
(cycle? (cdr x)) (whole-cycle? (cdr x)))))

どうすっかな。根本的な考え方を変更する必要があるのかも。

研究者にとっては問題を解くことじゃなく問題を見つけることが重要な仕事だって、どっかで聞いた記憶がある。僕は研究者ではないけれど、ほかの仕事の多くでも、問題を見つけることは積極的に評価されるべきだと思う。
というわけで、重ねてありがとうございます。>Anonymous

あー、なんか朝からハイだ。

どうでもいい妄想して勝手に怒りが込み上げてきた。あえて猥褻な言葉を使ってお茶を濁すと、問題を見つけることがビジネスモデルで、それを解くために投入する時間とコストと人材がビジネスポリシー。見つけた問題がセンスない&&周回遅れで、しかもその解決方法が的外れなんだから、誰とは言わないけど終わってる。まったく。

No comments :