通常,我们cons
在 RACKET 中将两个参数传递给 ,
eg:
(cons 23 '(1 2 3))
哪个输出'(23 1 2 3)
是否有任何程序可以执行以下操作
(procedure '(1 2 3) 23)
=>'(1 2 3 23)
尝试这个:
(append '(1 2 3) '(23))
=> '(1 2 3 23)
这对于附加单个元素来说很好。如果您打算在最后重复添加许多元素,最好将cons
所有内容放在开头,然后reverse
在完成后列出列表。为什么?因为append
用于构建输出列表会很快退化为O(n^2)
解决方案(参见:Schlemiel the Painter's algorithm)
在 Lisp/Scheme/Racket 中,如果你想要一个过程,编写它使其与内置过程在很大程度上无法区分:
#lang racket
(define (procedure a-list an-atom)
(cond
[(not (list? a-list)) (error "procedure: first argument not a list")]
[(pair? an-atom) (error "procedure: second argument is a list")]
[else
(append a-list (list an-atom))]))
然后使用它:
> (procedure '(1 2 3) 23)
'(1 2 3 23)