P23 (**) Extract a given number of randomly selected elements from a list.
2016-01-22 21:46
253 查看
问题描述
The selected items shall be returned in a list.sash> (rnd-select '(a b c d e f g h) 3) -> (e d a)
Hint: Use the built-in random number generator and the result of problem P20.
解法
(import (srfi 27)) (define rnd-select (lambda (ls n) (let f ([s ls] [n n]) (cond [(zero? n) '()] [else (let ([i (random-integer (length s))]) (cons (list-ref s i) (f (remove-at s (+ i 1)) (- n 1))))]))))
需要说明几点:
- R7RS没有自带随机数的函数,这里使用了SRFI-27中的
random-integer n产生
[0,n)间的随机整数;
- 使用了P20定义的
remove-at函数,该函数指定的列表索引从1开始,而
list-ref指定的列表索引从0开始,所以索引需要做简单转换。
相关文章推荐
- 用Python编写一个简单的Lisp解释器的教程
- Windows下Lisp环境配置
- 我以为的函数式编程
- authentication password与scheme区别
- 在Ubuntu12.04上的Common Lisp开发环境配置
- OSX 10.09上的common lisp环境搭建
- emacs学习
- MIT-scheme写的一个数据处理程序
- authentic Arizona Cardinals jerseys b2bjersey.com 8n
- 创造者的鉴赏力[转]
- 你需要掌握的三种编程语言
- Common Lisp 学习书目
- Beginning of Learning LISP.
- Begining Of Learning LISP (2)
- 毕业三年,新目标
- The hundred-year language - Paul Graham
- 编程起步
- 元编程(metaprogrammming)的艺术:元编程介绍
- URI vs URL vs URN
- Tomcat6配置SSL的方法