是否有与Common Lisp'等价的语言;什么是推拍?
在Commons Lisp中有命令“push”: 例如,它允许您将元素放在列表的第一位 球拍里有这样的东西吗 我试图在文档中搜索,但找不到它是否有与Common Lisp'等价的语言;什么是推拍?,lisp,common-lisp,racket,Lisp,Common Lisp,Racket,在Commons Lisp中有命令“push”: 例如,它允许您将元素放在列表的第一位 球拍里有这样的东西吗 我试图在文档中搜索,但找不到它 我唯一发现的是名为Forth的包中的一个命令,buildforstack-based计算。push是一个宏。表达式(push 10*var*)扩展为(setf*var*(cons 10*var*))。您可以在racket/scheme中创建类似的宏: (定义语法推送) (语法规则() ((expr var) (set!var(cons expr var((
我唯一发现的是名为Forth的包中的一个命令,buildforstack-based计算。
push
是一个宏。表达式(push 10*var*)
扩展为(setf*var*(cons 10*var*))
。您可以在racket/scheme中创建类似的宏:
(定义语法推送)
(语法规则()
((expr var)
(set!var(cons expr var(()())))
(定义x’())
(按10次)
(按20次)
x;==>(20 10)
如果将列表存储在一个框中,则还可以将其作为一个函数:
(定义(按下e框)
(设置框!框(cons e(取消框)))
(定义x(框'()))
(按10次)
(按20次)
x;==>#&(20 10)
push
是一个宏。表达式(push 10*var*)
扩展为(setf*var*(cons 10*var*))
。您可以在racket/scheme中创建类似的宏:
(定义语法推送)
(语法规则()
((expr var)
(set!var(cons expr var(()())))
(定义x’())
(按10次)
(按20次)
x;==>(20 10)
如果将列表存储在一个框中,则还可以将其作为一个函数:
(定义(按下e框)
(设置框!框(cons e(取消框)))
(定义x(框'()))
(按10次)
(按20次)
x;==>#&(20 10)
值得注意的是,这可能并不适用于common lisp的所有地方。例如,你能(按3(汽车列表))
将3添加到列表的第一个列表中吗?@JoshuaTaylor。虽然此宏仅适用于绑定,但CL版本将适用于定义了setf
扩展器的所有对象。天空是CL的极限:-)值得注意的是,这可能不会在common lisp的所有地方都起作用。例如,你能(按3(汽车列表))
将3添加到列表的第一个列表中吗?@JoshuaTaylor。虽然此宏仅适用于绑定,但CL版本将适用于定义了setf
扩展器的所有对象。天空是CL的极限:-)
(define (push x a-list)
(set-box! a-list (cons x (unbox a-list))))