私は過去数時間この質問に苦労していて、助けを求めてインターネットを探しました、そして私はまだそれを理解することができないようです。
質問は簡単です:
リストを取り、リスト内のアトムの数を返す再帰プログラム(lisp)を作成します。
私が行った調査によると、LISPには暗黙のカウンターが含まれているようですが、(+ 1)を実行すると、追跡されますか?これはオフですか?
助けてください、私はかなりイライラしています...
私は過去数時間この質問に苦労していて、助けを求めてインターネットを探しました、そして私はまだそれを理解することができないようです。
質問は簡単です:
リストを取り、リスト内のアトムの数を返す再帰プログラム(lisp)を作成します。
私が行った調査によると、LISPには暗黙のカウンターが含まれているようですが、(+ 1)を実行すると、追跡されますか?これはオフですか?
助けてください、私はかなりイライラしています...
パラメーターにカウンターを持ち込む必要があるだけです。私は永遠にLISPを使用していませんが、パラメーターとして単純な (+ counterName 1) を追跡する必要があります。ただし、開始値をスローすることを忘れないでください。
ここでの考え方は、グローバル変数を使用するのではなく、カウントを「スタックに」保持することです。
これが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))))