0

我正在尝试返回一个删除了所有字符串的列表

(remove-strings '(("hello" 9) (29 10) ("cruel" "world") (1238 .12) (-53 "end"))))
=> ((9) (29 10) () (1238 .12) (-53))

这是我到目前为止的代码(定义(删除字符串列表)(过滤字符串?列表))

我也在尝试对列表中的所有负数求平方,所以我得到了

(define (neg-sqr list)
  (map square (filter negative? list)) ; filters out negatives in list and squares each number
)  

应该返回 2809 因为它取每个负数的平方 (-53^2)

但是,上面的代码不起作用。我认为这是因为我需要使用第一步中的代码来删除字符串,以便我可以单独获取数字,还是因为这些项目嵌套了一层深?任何人都可以帮助我删除字符串程序吗?

4

3 回答 3

1

这是取出负数的代码

(define (f2b items)
   (accumulate (lambda (x y)
 (cons (append 
    (map square (filter negative? (filter number? x))
)
(filter positive? (filter number? x))
(filter string? x)
) y)) () items))

附言。你算出所有正数的总和吗?

于 2012-10-31T03:58:38.207 回答
1

使用这样的累积函数:

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence)))))

正确调用累积是一件简单的事情。

(define (remove-strings n)
   (accumulate (lambda (x y) (cons (filter number? x) y)) () n)
  )

这样做是将过程 lambda 重复应用于每个子列表,然后将它们组合在一起,从而为您留下无字符串的新列表。

于 2012-10-30T23:57:39.393 回答
0

filter将列表作为参数。
但是,您的输入remove-strings是列表列表,您希望单独处理它们。
也许您可以想办法将函数应用于列表中的每个项目?

于 2012-10-30T11:29:07.823 回答