我不确定我做错了什么,我无法理解我的结果
以下是 DrRacket :
中的代码(define (checkType . x)
(cond
[(vector? x) (display "x is a vector")]
[(list? x) (display "x is a list")]
[#t (newline)]
))
> (checkType (make-vector 3 #(1 2 3)))
x is a list
> (checkType (make-vector 3 #(1 2 3)))
x is a list
> (vector? (make-vector 3 #(1 2 3)))
#t
> (list? (make-vector 3 #(1 2 3)))
#f
这就是我的问题所在。
当我传入向量时,为什么它不显示"x is a vector"
?事实上,当我传入一个向量时,它甚至会通过检查它是否为列表的条件。难道这不会发生并跳到最后一个表达式吗?如输出中所示,make-vector
创建向量而不是列表。
我是否误解了某事的语义?
答案 0 :(得分:1)
为什么在.
参数之前有一个x
点?拿出来。 .
表示x
将被视为“varargs”rest参数,该列表包含所有其余参数。取.
,x
将成为正常参数。
(define (checkType x)
(cond
[(vector? x) (displayln "x is a vector")]
[(list? x) (displayln "x is a list")]
[else (newline)]))