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

标签 functional-programming lisp scheme

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

(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/

相关文章:

javascript - 什么是无 null 代码以及它如何应用于 Javascript?

javascript - 尝试使用 XMLHttpRequest 获取 JSON 对象失败并导致引用为空

LISP:来自汉诺塔问题的 lisp 溢出问题

haskell - 获取树中定义的整数的总和和乘积

concurrency - Elixir - 受监督的进程似乎会阻止程序执行

clojure - 在 Clojure 中声明匿名函数是否很昂贵?

windows - read-line 在 WINDOWS 上只读取 1 个字符

scheme - 正则表达式不匹配方案中的字符串但适用于其他平台

scheme - 在没有条件的情况下将 Scheme/Racket 中的 bool 值转换为整数?

按方案中的第一个元素对列表列表进行排序