gpt4 book ai didi

recursion - Scheme 中的递归函数只返回列表中的第一项

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:45 24 4
gpt4 key购买 nike

我的函数只返回第一个元素——我的基本情况。也许我的递归错误,也许我需要一些关于 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(我列表中的第一个元素)的十进制转换。我认为问题显然出在我的其他情况下,但我没有看到问题并希望得到一些帮助。我四处搜索并阅读到使用“缺点”将构造(可以这么说)列表中具有应用更改的元素。不确定这是否正确。谢谢!

最佳答案

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

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

关于recursion - Scheme 中的递归函数只返回列表中的第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19648499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com