【入門】Common Lisp その7【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0200デフォルトの名無しさん
2010/07/01(木) 00:13:20与えられた数と演算子から、リストを狭めるfilter関数を作れと言われています。
例えば(list 3 7 4 1 6)に対して、数字5と演算子>=が与えられれば、リストの中から
5以上の要素だけを抜き出した(list 7 6)を返す、というものです。ここで、
(define (reduce op base L)
(cond
[(empty? L) base]
[else (op (first L)
(reduce op base (rest L)))])) というreduce関数を使えと指示がありました。
reduce関数の挙動はLに(list 1 2 3)を入れれば(op 1 (op 2 (op 3 base)))となる感じです。
そこで私は局所関数fを用いて以下のように定義しました。
(define (filter rel_op L t)
(local ((define (f n L)
(cond
[(rel_op n t) (cons n L)]
[else L]))))
(reduce f empty L)) ……(☆)
これに対して (filter >= (list 3 7 4 1 6) 5) と実行すると、
filter関数の挙動は、(f 3 (f 7 (f 4 (f 1 (f 6 empty)))))となるので、あとは関数fに従って(list 7 6)が
返ってくる筈なのですが、(☆)の行で、関数に対して無駄な部分がある というメッセージと共に
エラーが出ます。何処が間違っているのか、ご教授頂けないでしょうか。
■ このスレッドは過去ログ倉庫に格納されています