模拟Python在Scheme中的范围

Mir*_*lov 8 python scheme

如何在Scheme中创建连续数字列表?

在Python中创建一个从1到10的整数列表range(1,11).方案有同等效力吗?

mzscheme --versionWelcome 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开始,指定间隔的能力.


its*_*uce 5

这是一个版本,如果第一个数字较低则执行上升范围,如果较高则执行下降范围:

(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)