通常,我们在RACKET
中将两个参数传递给cons
eg:
(cons 23 '(1 2 3))
输出'(23 1 2 3)
是否有任何程序可以执行以下操作
(procedure '(1 2 3) 23)
=> '(1 2 3 23)
答案 0 :(得分:3)
试试这个:
(append '(1 2 3) '(23))
=> '(1 2 3 23)
可以附加单个元素。如果您计划在最后重复添加许多元素,那么如果您cons
处于头顶,然后reverse
列表完成后,情况会更好。为什么?因为使用append
构建输出列表会很快退化为O(n^2)
解决方案(请参阅:Schlemiel the Painter's algorithm)
答案 1 :(得分:0)
在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)