Scheme 什么';这是怎么回事?

Scheme 什么';这是怎么回事?,scheme,racket,Scheme,Racket,Racket因以下代码而违反合同: (define (fringe x) (append (car x) (fringe (cdr x)))) 有什么问题吗?发生这种情况是因为(car x)没有返回列表(如果不知道引起错误的x的实际值,很难确定)追加是在两个列表之间定义的操作。如果要在列表的开头添加元素,请使用cons而不是append 这就是我的意思: (append 1 '(2 3)) => append: expected argument of type <proper

Racket因以下代码而违反合同:

(define (fringe x)
  (append (car x) (fringe (cdr x))))
有什么问题吗?

发生这种情况是因为
(car x)
没有返回列表(如果不知道引起错误的
x
的实际值,很难确定)<代码>追加是在两个列表之间定义的操作。如果要在列表的开头添加元素,请使用
cons
而不是
append

这就是我的意思:

(append 1 '(2 3))
=> append: expected argument of type <proper list>; given 1

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

(cons 1 '(2 3)) ; the recommended way!
=> '(1 2 3)
(附加1'(2 3))
=>append:类型为的预期参数;给定1
(附加“(1)”(2 3))
=> '(1 2 3)
(一)(二)(三);;推荐的方式!
=> '(1 2 3)

如果没有上下文,你就指望人们知道函数
应该做什么。不要让我们猜:告诉我们它应该做什么。