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

Recursion Scheme中的递归函数仅返回列表中的第一项,recursion,lisp,scheme,Recursion,Lisp,Scheme,My函数只返回第一个元素—我的基本大小写。也许我的递归错误了,也许我需要一些关于lisp中函数的帮助 函数需要返回转换为十进制的二进制列表中所有元素的总和。我选择先将列表中的每个元素转换为十进制,然后在转换后添加其余元素。我有两个功能。第一个很好,convertToBinary: (define (binaryToDecimal n) (cond [(zero? n) 0] [else (+ ( * 2 (binaryToDecimal (quotient n 10)))

My函数只返回第一个元素—我的基本大小写。也许我的递归错误了,也许我需要一些关于lisp中函数的帮助

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

您的代码中有两个
(cdr'(binaryList))
实例,但它们并没有达到预期的效果。也许您打算使用
(cdr二进制列表)
。无论如何,您的基本情况也有点古怪:我认为您的基本情况应该是空列表,并在这种情况下返回0:

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

您的代码中有两个
(cdr'(binaryList))
的实例,它们并没有达到您所期望的效果。也许您打算使用
(cdr二进制列表)
。无论如何,您的基本情况也有点古怪:我认为您的基本情况应该是空列表,并在这种情况下返回0:

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

啊哈!这就解决了!万分感谢——我已经在墙上使劲敲了一个小时的头(不是真的)想弄明白。当这件事如此愚蠢的时候,我会死的;)啊哈!这就解决了!万分感谢——我已经在墙上使劲敲了一个小时的头(不是真的)想弄明白。当这件事如此愚蠢的时候,我会死的;)