1

私の関数は、最初の要素 (基本ケース) のみを返します。再帰が間違っているのかもしれませんし、lisp の関数について助けが必要なのかもしれません。

関数は、10 進数に変換されたバイナリ リスト内のすべての要素の合計を返す必要があります。リストの各要素を 10 進数の FIRST に変換し、変換されたときに残りを追加することにしました。私には2つの機能があります。最初の convertToBinary はうまく機能します:

(define (binaryToDecimal n)
   (cond [(zero? n) 0]
         [else (+ ( * 2 (binaryToDecimal (quotient n 10)))
                  (remainder n 10))]
         )) 

2番目のものはあまり良くありません:

(define (addBinary binaryList)
   (cond [(null? (cdr '(binaryList))) (binaryToDecimal (car binaryList))]
    [else 
     (cons (+ (binaryToDecimal (car binaryList)) 
              (addBinary (cdr '(binaryList)))))]
    ))

これで関数を呼び出すと:

(addBinary '(1101 111 10 101))

次に、13 を取得します。これは、1101 (リストの最初の要素) を 10 進数に変換したものです。明らかに問題は私のelse状態にあると思いますが、問題は見られず、助けを求めていました。私は周りを検索して、「cons」を使用すると、変更が適用されたリスト内の要素が(いわば)構築されることを読みました。これが正しいかどうかはわかりません。ありがとう!

4

1 に答える 1

1

あなたのコードには のインスタンスがいくつかありますが(cdr '(binaryList))、期待どおりに動作しません。おそらく、(cdr binaryList)代わりに使用するつもりでした。とにかく、あなたのベースケースも少しファンキーです: あなたのベースケースは空のリストであるべきだと思います.その場合、0を返します:

(define (addBinary binaryList)
  (cond ((null? binaryList) 0)
        (else
         (+ (binaryToDecimal (car binaryList))
            (addBinary (cdr binaryList))))))
于 2013-10-29T02:28:13.823 に答える