【问题标题】:In DrRacket how do I make a list of lists在 DrRacket 中,我如何制作列表列表
【发布时间】:2019-06-18 03:19:39
【问题描述】:

基本上我要做的只是在 DrRacket 'Lamda 中级学生'中列出列表,但我不确定如何处理。

我仍然是使用 Racket 的新手,所以我至少明白我必须使用 lambda 才能创建列表列表,至少这是我知道的一种方法,但我仍然不知道怎么办。

我想做一个功能,当你输入时

(list (list 1 2 3) (list 3 4 5) (list 6 7 8)) 它会计算一些东西。

我需要知道这一点,这样我才能解决我目前正在研究的问题:

写一个函数(keep-counts L threshold mincount),其中L是一个 (listof (listof Num)),其他参数均为​​Num。

此函数返回一个列表,其中包含 L 中的所有值 至少包含大于阈值的 mincount 值。

例子:

(keep-counts (list (list 1 1 2 5) (list 1 4 4 1) (list 6 6 4 7)) 2 2) => 
(list (list 1 4 4 1) (list 6 6 4 7))

这是因为只有这两个列表包含至少两个大于 2 的值。

【问题讨论】:

  • (list (list 1 2 3) (list 3 4 5) (list 6 7 8)) 已经是一个列表列表。我不确定你的问题在问什么。 “计算一些东西”非常模糊。请编辑您的问题以更具体地说明您遇到的问题,如果您不确定如何操作,请参阅stackoverflow.com/help/how-to-ask
  • 好的,我会编辑这个问题,我想知道如何制作一个允许我制作列表列表的函数,有必要回答我正在处理的问题.然后我将发布问题,以便更好地理解我的问题。好的,我已经编辑了问题。
  • "我必须使用 lambda 才能创建列表列表" - 为什么? Lambda 创建一个函数,而不是一个列表。
  • 你“刚刚失败”是什么意思? (list (list 1 2 3) (list 3 4 5) (list 6 7 8)) 是有效代码,它会创建一个列表列表。你还想要什么?
  • "手动编写列表如何帮助我解决我要解决的问题" - 不是。但你问的只是“我如何制作列表列表”。

标签: list lambda racket


【解决方案1】:

解决方案可以用高阶过程表示:

(define (keep-counts lst mincount threshold)
  (filter (λ (sl)
            (>= (count (λ (e) (> e mincount))
                       sl)
                threshold))
          lst))

上面的代码说明:过滤所有元素数量大于mincount的子列表大于给定的threshold。解决方案实际上是自己写的!

(keep-counts (list (list 1 1 2 5) (list 1 4 4 1) (list 6 6 4 7)) 2 2)
=> '((1 4 4 1) (6 6 4 7))

【讨论】:

  • 有没有办法改变代码,而不是计数,使用长度。我目前正在尝试这样做。我不知道之前在 Racket 中 count 做了什么,所以我使用了 docs.Racket-lang.org 并想出了 (>= length (filter lambda (t) (>t mincount)) (map s))) 而不是 ( >= (count (lambda (t) (> t mincount)) 不幸的是,我不能使用 count 和 filter-map 所以根据这些函数的定义我想出了那段代码。虽然它不起作用,但我期待所以我很好奇如何使用长度、过滤器和映射函数编写计数函数。
  • count is just (length (filter...)) 在同一个列表中使用同一个谓词
  • 其实没关系,我解决了我的错误。在那段代码中,地图是不必要的。我只需要添加过滤器和长度。 (编辑)我在你回答我的问题时写了这个,不过谢谢。
猜你喜欢
  • 2013-10-29
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2021-11-28
  • 2022-01-09
相关资源
最近更新 更多