如何用单个Lisp/Scheme表达式将'z插入列表'(a b)头部?
在Scheme/Lisp列表开头插入元素的正确方法
要把'z插入列表'(a b)的开头得到'(z a b),最直接且标准的方法是使用**cons**函数,这是Scheme/Lisp中构造列表的核心操作:
(cons 'z '(a b))
执行这个表达式会直接返回(z a b),因为cons的作用就是将第一个参数作为新的表头元素,第二个参数作为剩余列表,拼接成新的列表,这是时间复杂度O(1)的高效操作。
为什么你之前的尝试出错?
push:这是Common Lisp的扩展宏,Scheme标准库中并没有定义这个符号,直接使用会触发「变量未绑定」错误。append:append要求所有参数都是列表,如果你写(append 'z '(a b)),会因为第一个参数不是列表触发「变量数量/类型错误」。正确的写法是(append '(z) '(a b)),虽然能得到结果,但append需要遍历整个列表,效率远不如cons。insert:Scheme标准库没有内置insert函数,直接调用会提示「变量未绑定」,除非你自己实现这个函数。define:define是用来定义变量或函数的,它本身不能直接构造列表,需要配合cons这类构造函数使用,比如(define new-list (cons 'z '(a b)))来保存结果。
额外示例:保存结果到变量
如果需要将新列表保存下来复用,可以这样写:
; 定义原列表 (define original-list '(a b)) ; 构造并保存新列表 (define updated-list (cons 'z original-list)) ; 查看结果 updated-list ; 输出 (z a b)
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

