我怎样才能以相反的方式使用CONS?

时间:2015-01-21 15:11:27

标签: scheme racket cons

通常,我们在RACKET

中将两个参数传递给cons

eg: (cons 23 '(1 2 3))

输出'(23 1 2 3)

是否有任何程序可以执行以下操作

(procedure '(1 2 3) 23) => '(1 2 3 23)

2 个答案:

答案 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)