いくつかの作業の後で関数を理解することができましたが、次のコード(p。143)multirember&co
からはあまり意味がありません。multiinsertLR&co
(define multiinsertLR&co
(lambda (new oldL oldR lat col)
(cond
((null? lat)
(col '() 0 0))
((eq? (car lat) oldL)
(multiinsertLR&co
new
oldL
oldR
(cdr lat)
(lambda (newlat L R)
(col (cons new
(cons oldL newlat))
(add1 L) R))))
((eq? (car lat) oldR)
(multiinsertLR&co
new
oldL
oldR
(cdr lat)
(lambda (newlat L R)
(col (cons oldR
(cons new newlat))
L (add1 R)))))
(else
(multiinsertLR&co
new
oldL
oldR
(cdr lat)
(lambda (newlat L R)
(col (cons (car lat)
newlat) L R)))))))
collector
この本は、関数を評価するときに最初にどちらを渡す必要があるかを説明していないようです。そこで、それぞれ138ページと140ページで説明されているa-friend
コレクターとコレクターを使用しました。last-friend
いずれかのコレクターで関数を評価すると、次のエラーが発生します(petit chezスキームでトレース関数を使用)。
>> (multiinsertLR&co 'salty 'fish 'chips '(chips and fish or fish and chips) last-friend)
|(multiinsertLR&co salty fish chips (chips and fish or fish and chips)
#<procedure>)
|(multiinsertLR&co salty fish chips (and fish or fish and chips)
#<procedure>)
|(multiinsertLR&co salty fish chips (fish or fish and chips) #<procedure>)
|(multiinsertLR&co salty fish chips (or fish and chips) #<procedure>)
|(multiinsertLR&co salty fish chips (fish and chips) #<procedure>)
|(multiinsertLR&co salty fish chips (and chips) #<procedure>)
|(multiinsertLR&co salty fish chips (chips) #<procedure>)
|(multiinsertLR&co salty fish chips () #<procedure>)
Exception: incorrect number of arguments to #<procedure>
Type (debug) to enter the debugger.
コードを数回調べましたが、エラーが見つかりませんでした。誰かが何か洞察を持っているなら、それを共有してください。誰かが私に(比較的言えば)継続の穏やかな説明をいくつかの良い例とともに指摘することができれば、それも大いにありがたいです。