1

我的函数只返回第一个元素——我的基本情况。也许我的递归错了,也许我需要一些关于 lisp 函数的帮助。

该函数需要返回转换为十进制的二进制列表中所有元素的总和。我选择先将列表中的每个元素转换为十进制,然后在转换后添加其余元素。我有 2 个功能。第一个效果很好, convertToBinary :

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

第二个不太好:

(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(我列表中的第一个元素)的十进制转换。我认为显然问题出在我的其他情况下,但我没有看到问题并希望得到一些帮助。我四处搜索并阅读到使用“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 回答