默认情况下,Racket不提供可变对,因此也没有可变列表.这意味着对和列表的值是不可更改的.
但是,您可以(require racket/mpair),顾名思义,它提供可变对.然后使用mcons,mcar,mcdr,mlist,等来代替cons,car,cdr,list.
其他答案是正确的,但可能不是你想要的.更惯用的Scheme/Racket方法是编写一个消耗原始输入的函数,并返回一个具有所需修改的新的单独列表.(这是强烈优选的,因此默认情况下列表是不可变的.)因此,例如,您可能会写
(define (numberify-head lst)
(cond
[(eq? (car lst) #\1) (cons 1 (cdr lst))]
[(eq? (car lst) #\2) (cons 2 (cdr lst))]
[else lst]))
Run Code Online (Sandbox Code Playgroud)
然后你的程序会像
(let* ([input (read-input-from-the-user)]
[processed-list (numberify-head input)])
;; ... code that uses processed-list ...
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5947 次 |
| 最近记录: |