1

one数日前に、シンボルのリストを消費し、同じリストを返すが、インスタンスがcat2倍になる関数を開発する方法を尋ねました。

たとえば

 (one (cons 'animal(cons 'table (cons 'cat (cons 'bread
        empty)))))

私は得るだろう

(cons 'animal (cons 'table (cons 'cat (cons 'cat (cons 'bread 
    empty)))))

ここに私の部分があります

(define (one alos)
  (cond [(empty? alos)empty]
        [(symbol=? 'cat (first alos)) (cons (first alos) (cons (first alos) (one rest alos)))]
         [else (cons (first alos) (one rest alos))]))

なぜ私は'1つを取得し続けるのか疑問に思っています:1つの引数しか期待していませんが、2つ見つかりました'?

4

2 に答える 2

2

ここを見てください: [(symbol=? 'cat (first alos)) (cons (first alos) (cons (first alos) (one rest alos)))] そしてここ: [else (cons (first alos) (one rest alos))]))

とは何oneですか?

于 2013-02-13T01:09:01.310 に答える
2

いくつかの括弧がありません。これで修正できます。

(define (one alos)
  (cond [(empty? alos) empty]
        [(symbol=? 'cat (first alos))
         (cons (first alos) (cons (first alos) (one (rest alos))))]
        [else (cons (first alos) (one (rest alos)))]))

one次のように再帰的に呼び出していることに注意してください。

(one rest alos)

しかし、それを呼び出す正しい方法はこれです:

(one (rest alos))
于 2013-02-13T01:19:27.373 に答える