gpt4 book ai didi

functional-programming - 从列表中添加数字(例如 asdf125dkf 将返回 8)

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

我需要一个函数来接收字符和数字列表,然后返回相加的数字(忽略字符)。这是我目前所拥有的:

(define (adder lst)
(cond
((null? lst)
0)
((number? (car lst))
(+(adder (car lst)) (adder (cdr lst))))
((char? (car lst))
((adder(cdr lst))))
))

(display (adder '(asd12sdf)))

在 codepad.org 上运行它只会显示 void。我知道代码是错误的,因为它看起来是错误的,但我不知道如何修复它......我如何让函数跟踪它找到的第一个数字并将它添加到它找到的下一个数字,同时跳过所有人物?

最佳答案

在您的第二个 cond 情况下,没有理由在 (car lst) 上运行 adder。只需将 (car list) 本身添加到递归步骤中即可。

对于最后一行,不要测试 (char? (car lst))。只需将最后一行作为 else 子句,这意味着除了数字之外的任何内容都将转到 else 行。

你得到 void 的原因是因为你的输入不满足 任何 cond 条件,而且你没有 else ,所以答案什么都不是(即 (void))。

最后一个错误是您提供的输入。 '(asd12sdf) 实际上是一个包含一个 符号的列表,名为“asd12sdf”。我想你想给它 '(a s d 1 2 s d f)(6 个符号和 2 个数字的列表),结果应该是 3。请注意,符号 之间有一个非常重要的区别'a 和字符 #\a

看起来你的逻辑不对,所以你的问题似乎不是函数式语言,只是 Scheme 的语法。

编辑: 在最后一行中,您有 ((adder(cdr lst))),它周围有太多括号。这将导致 Scheme 尝试将加法器的结果(这是一个数字)作为一个过程(错误!)求值。

关于functional-programming - 从列表中添加数字(例如 asdf125dkf 将返回 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093168/

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