如何在Scheme中创建连续数字列表?
在Python中创建一个从1到10的整数列表range(1,11).方案有同等效力吗?
mzscheme --version 给 Welcome to Racket v5.2.1.
编辑:根据/sf/answers/500101731/实现范围功能,需要以下代码:
#lang racket
(require srfi/1)
(iota 5 1)
Run Code Online (Sandbox Code Playgroud)
小智 11
寻找iota(如SRFI-1中所定义).
示例:(iota 10 1)从1开始给出10个连续的整数(而不是默认值0).
iota不会使用与范围相同的参数,但它会复制所有功能 - 升序范围,降序范围,如果只给出一个边界,则从0开始,指定间隔的能力.
这是一个版本,如果第一个数字较低则执行上升范围,如果较高则执行下降范围:
(define range
(lambda (n m)
(cond
((= n m) (list n))
(else (cons n (range ((if (< n m) + -) n 1) m))))))
Run Code Online (Sandbox Code Playgroud)
这是一个改进的版本,可以带1或2个参数; 如果只给出一个,它的范围从0到给定的数字:
(define range
(lambda (n . m)
(let
((n (if (null? m) 0 n)) (m (if (null? m) n (car m))))
(cond
((= n m) (list n))
(else (cons n (range ((if (< n m) + -) n 1) m)))))))
Run Code Online (Sandbox Code Playgroud)
小智 5
Racket 中有一个内置的range函数,其行为类似于 Python。
> (range 10)
'(0 1 2 3 4 5 6 7 8 9)
Run Code Online (Sandbox Code Playgroud)