1

通常,我们cons在 RACKET 中将两个参数传递给 ,

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

哪个输出'(23 1 2 3)

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

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

4

2 回答 2

3

尝试这个:

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

这对于附加单个元素来说很好。如果您打算在最后重复添加许多元素,最好将cons所有内容放在开头,然后reverse在完成后列出列表。为什么?因为append用于构建输出列表会很快退化为O(n^2)解决方案(参见:Schlemiel the Painter's algorithm

于 2015-01-21T15:19:06.503 回答
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)
于 2015-01-21T22:14:10.180 回答