在Commons Lisp中有命令“push”:
(define (push x a-list)
(set-box! a-list (cons x (unbox a-list))))
例如,它允许您将元素放在列表中。
在Racket中有这样的东西吗?
我尝试在文档中搜索,但找不到它。
我唯一发现的是一个名为Forth的包中的push命令,用于基于堆栈的计算。
答案 0 :(得分:2)
push
是一个宏。表达式(push 10 *var*)
扩展为(setf *var* (cons 10 *var*))
。你可以在racket / scheme中制作一个类似的宏:
(define-syntax push
(syntax-rules ()
((_ expr var)
(set! var (cons expr var)))))
(define x '())
(push 10 x)
(push 20 x)
x ; ==> (20 10)
如果您将列表存储在一个框中,那么您也可以使其成为一个功能:
(define (push e box)
(set-box! box (cons e (unbox box))))
(define x (box '()))
(push 10 x)
(push 20 x)
x ; ==> #&(20 10)