【问题标题】:how to use built in list function "filter"如何使用内置列表功能“过滤器”
【发布时间】:2012-10-12 14:21:10
【问题描述】:

请帮助我使用 DrScheme 内置功能“过滤器”。

“创建一个函数“hello”,它使用一个数字'Max'和一个数字列表'L',生成一个'L'中小于'Max'的数字列表。”

编辑取自 cmets 进行格式化

这是我目前所拥有的

(define (smaller? n Max) 
  (cond 
    [(> Max n) n] 
    [else empty])) 
(define (hello Max L) 
  (filter smaller? L))

我不知道如何在函数hello中实现Max。

【问题讨论】:

  • 你为什么不向我们展示你到目前为止所做的事情,以及你在哪里卡住了?
  • 这是我到目前为止所拥有的(定义(更小?n Max)(cond [(> Max n)n] [else empty]))(定义(你好 Max L)(过滤更小? L)) 我不知道如何在函数 hello 中实现 Max
  • (qrsvar (uryyb znk y) (svygre (ynzoqn (k) (> znk k)) y)) :-P
  • 为了帮助您回答一下,您了解闭包了吗?如果不使用闭包,这个问题实际上是无法解决的。
  • 你不需要为此关闭。

标签: list filter scheme


【解决方案1】:

使用您的 smaller? 定义,我会选择类似的东西

(define (hello Max L)
  (filter (lambda (n) (smaller? n Max)) L))

这使用了一个 lambda 函数,它是 hello 函数的 Max 参数的闭包。所以它“嵌入”了Max 用于过滤的 lambda 函数。

【讨论】:

  • 感谢您同意我关于闭包的观点。 :-)
  • 当然,smaller? 函数完全是多余的。
  • 这就是我最终得到的结果 (define (hello Max L) (filter (smaller Max) L)) (define (smaller Max) (lambda (n) (
【解决方案2】:

提示:您可以使用lambda 创建匿名函数:

(lambda (x) (have-fun-with x))

编辑:另一个提示:(> Max n) 已经返回一个布尔值,您不需要封闭的 cond 结构。

【讨论】:

  • 我的问题是我不确定如果不使用 lambda 中的 Max 怎么办
  • 或者更确切地说,过滤器内的谓词只消耗一件事,但我有两件事,'Max'和'L',所以我不知道如何解决这个问题
  • 如果在函数中使用 lambda,它会看到该函数范围内的所有内容。
  • @Ben:你可以通过使用闭包来解决这个问题。示例:(lambda (foo) (lambda (bar) (+ foo bar)))。内部 lambda 可以访问外部 lambda 中的“foo”。希望有帮助!
  • 谢谢你们,你们对关闭的讨论真的很有帮助,我研究了一下,发现该怎么做
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 2019-10-15
  • 2020-10-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
相关资源
最近更新 更多