-2

您好,我需要创建一个函数,该函数使用一个列表,该列表仅汇总列表中的数字并忽略任何其他类型的数据(字符串等)

示例(仅添加数字(cons 5 (cons "b" (cons 2 (cons "whatsup" empty)))))应该出来(cons 7 (cons "b" (cons "whatsup" empty)))

在收集数字并将它们全部相加时,保持所有字符串或其他数据类型的顺序。

如果没有数字,只有字符串,那么前面应该是 0

示例(仅添加数字 (cons "eb" (cons "b" ( cons (make posn 5 0) (cons "whatsup" empty)))))应该出现在 (cons 0 (cons "eb" (cons “b”(缺点(使 posn 5 0)(缺点“whatsup”为空)))))

非常感谢您的帮助!

4

1 回答 1

0

由于这闻起来有点像家庭作业,我会让你走上正轨:

#!/usr/bin/racket
#lang racket

(define (sum lst)
  (foldl (lambda (num sum)
           (if (number? num) (+ sum num) sum))
         0
         lst))

(sum '(1 2 "hello"))

所以这将返回一个平面列表的总和......应该是一个更简单的步骤来将它推到列表的前面。

请注意,该foldl函数采用一个函数来应用每个元素、起始值和列表。

于 2013-02-27T02:52:09.960 回答