如何以相反的方式使用 CONS?

How can I use CONS in reverse way?

通常,我们将两个参数传递给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)