Scheme中的递归函数仅返回列表中的第一项

时间:2013-10-29 02:17:11

标签: recursion lisp scheme

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

该函数需要返回转换为十进制的二进制列表中所有元素的总和。我选择将列表中的每个元素转换为十进制FIRST,然后在转换时添加其余元素。我有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”将使用应用的更改构建(可以说)列表中的元素。不确定这是否正确。谢谢!

1 个答案:

答案 0 :(得分:1)

您的代码有几个(cdr '(binaryList))个实例,但这些实例并不符合您的预期。也许您打算使用(cdr binaryList)代替。无论如何,你的基本情况也有点时髦:我认为你的基本情况应该是空列表,并在这种情况下返回0:

(define (addBinary binaryList)
  (cond ((null? binaryList) 0)
        (else
         (+ (binaryToDecimal (car binaryList))
            (addBinary (cdr binaryList))))))