小编gib*_*ian的帖子

在方案中随机取一组元素

如何在 Scheme 中实现一个程序,获取给定列表的元素并返回一个新列表,其中元素是前一个列表的随机集合?我希望它适用于任何长度。例如:

输入:'(a e i o u),输出:'((a e) (i o) (u))长度为 2。

我的尝试(使用 for/list)很笨拙并且基于递归。我按照Óscar的建议划分了任务:

  1. 从列表 l 中随机选择 n 个元素:

    (define (pick-n-random l n)
      (take (shuffle l) n))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从列表 l1 中删除列表 l2:

    (define (cut l1 l2)
      (cond ((null? l1)
             '())
            ((not (member (car l1) l2))
             (cons (car l1) (cut (cdr l1) l2)))
            (else
             (cut (cdr l1) l2))))
    
    Run Code Online (Sandbox Code Playgroud)

然后,这就是我的问题:我如何递归这个过程以获得预期的程序?我应该使用for/list粘贴此过程 1. 和 2. 获得的所有子列表吗?

lisp scheme functional-programming

3
推荐指数
1
解决办法
182
查看次数

标签 统计

functional-programming ×1

lisp ×1

scheme ×1