【发布时间】:2019-05-05 16:16:05
【问题描述】:
我不确定我是否可以在这里问这个问题。如果这不是正确的地方,请告诉我,我会删除它。
我正在学习 Racket,有人告诉我如何避免在函数式编程风格中使用 set!。但是我很困惑,我不明白“函数式编程风格”的含义。只是为了学习,我想问这个问题。
我有以下代码:
(define lst1 '())
(do ([i n (- i 1)])
((zero? i))
; Get an item.
(set! item (random-chooser original-list))
; Insert it into an auxiliary list, lst1
(set! lst1 (cons item lst1))
; Remove the item from the original list
(set! original-list (remove item original-list)))
(append (list lst1) (list original-list))))))
此代码运行良好。我必须从original-list 列表中随机选择n 项目,不重复。然后创建一个包含两个子列表的列表,其中在lst1 中选择了n 项目,并将original-list 中的其余项目作为第二个子列表。
在不使用set! 的情况下,有没有更好的方法来做到这一点?
【问题讨论】:
-
您的编辑实际上使三个答案中的两个无效。据我了解规则,我们不应该在 SO 上这样做。我觉得有义务回滚您的编辑。 :) 你总是可以问一个新问题,改变要求。 :)
-
@WillNess 如果我问另一个问题,类似于这个问题,我会得到很多反对票,因为人们会认为它是重复的。
-
但它不是重复的。在这里您要求 k 随机选取的值,您将指定必须使用用户提供的函数。还包括此问题的链接,作为背景。
-
这个问题已经结束(因为我有答案),但我在问如何避免使用
set!。感谢您的 cmets。
标签: list random functional-programming scheme racket