-1

私は過去数時間この質問に苦労していて、助けを求めてインターネットを探しました、そして私はまだそれを理解することができないようです。

質問は簡単です:

リストを取り、リスト内のアトムの数を返す再帰プログラム(lisp)を作成します。

私が行った調査によると、LISPには暗黙のカウンターが含まれているようですが、(+ 1)を実行すると、追跡されますか?これはオフですか?

助けてください、私はかなりイライラしています...

4

2 に答える 2

0

パラメーターにカウンターを持ち込む必要があるだけです。私は永遠にLISPを使用していませんが、パラメーターとして単純な (+ counterName 1) を追跡する必要があります。ただし、開始値をスローすることを忘れないでください。

于 2012-10-05T03:53:02.603 に答える
0

ここでの考え方は、グローバル変数を使用するのではなく、カウントを「スタックに」保持することです。

これがSchemeソリューションです。これを、使用している Lisp 方言に変換できると確信しています。

(define (count-a lst)
  (cond ((null? lst) 0)
        ((eq? (car lst) 'a) (+ (count-a (cdr lst)) 1))
        (else (count-a (cdr lst)))))

それが DRY で十分でない場合は、より凝縮されたバージョンを次に示します。

(define (count-a lst)
  (if (null? lst) 0
      (+ (count-a (cdr lst)) (if (eq? (car lst) 'a) 1 0))))
于 2012-10-05T04:22:55.560 に答える