答案 0 :(得分:3)
参考文档适用于MIT Scheme,您使用的是带有#lang scheme
语言的Racket。请改用sort
程序,它返回一个新的排序列表:
(define lst1 '(3 2 1 0))
(define lst2 (sort lst1 <))
lst1
=> '(3 2 1 0)
lst2
=> '(0 1 2 3)
如果您需要在排序后修改输入列表,请使用:
(define lst1 '(3 2 1 0))
(set! lst1 (sort lst1 <))
lst1
=> '(0 1 2 3)
答案 1 :(得分:2)
您链接的文档适用于mit-scheme而非Racket。 Racket的文档在这里:http://docs.racket-lang.org/search/index.html?q=sort
请注意,#lang方案中的方案并不意味着R5RS或R6RS,而是意味着 “MzScheme语言”。如今大多数人都使用#lang球拍。
#lang scheme
(require rnrs/sorting-6)
(define v (vector 5 3 2))
(vector-sort! < v)
v
如果您想将R6RS与Racket一起使用,请举例如下:
#!r6rs
(import (rnrs lists (6))
(rnrs base (6))
(rnrs io simple (6)))
(display (find even? '(3 1 4 1 5 9)))
答案 2 :(得分:1)
使用句法扩展名定义您自己的sort!
:
(define-syntax-rule (sort! lst p ...)
(set! lst (sort lst p ...)))
然后
> (define lst1 '(3 2 1 0))
> (sort! lst1 <)
> lst1
(0 1 2 3)
答案 3 :(得分:0)
DrRacket(或者只是在CLI中的球拍)是一种多语言实现。最奇怪的是,#lang scheme
(或只是#!scheme
)根本不遵循Scheme标准,而是R5RS兼容一次的语言的遗留名称,但已将其名称更改为{{ 1}}并且具有不可变对作为标准。
使用可变对的球拍程序支持的其他语言是#!racket
和#!r5rs
。这些遵循Scheme标准,如果您使用这些,您也可以编译和运行您的程序与其他实现。只需将第一行更改为,即表示该文件的其余部分将以该语言编程。 R6RS有#!r6rs
而R5RS需要SRFI-95 sort library的vector-sort
支持
PS:如果您关注的是SICP,您可能会对sort!
感兴趣。 See here if you need help getting it to work