这个题本来很简单,但是我却花了很长时间,因为盲写的第一版代码,一直报奇怪的错误
第一次看见空指针异常,直接傻眼,看着执行出来的步骤,也没有什么奇怪的地方。实在找不到问题,一行行删除代码执行,直到下面的情况,居然还在报错。
这把我给整不会了,啥代码会这样?仔细看仔细看,原来是在函数定义的位置多了一对括号。
上面这个正确的代码应该是下面这种样子。多说一点,这里为啥要定义一个内部函数,主要是因为不定参p 拿到的是个list ,递归的时候,会变成list list嵌套,生成(2 3 4 5 6)((3 4 5 6))这种结构进行参数传递,不方便代码的编写。
(defn same-parity[l & p]
(defn iter[l m ]
(println m) )
(iter l p)
)
惨痛的教训啊,本来几分钟就能搞定的问题,结果在不停的自我怀疑与否定中,改来改去,都是不细心的祸,那我们把题目正确的代码贴上来。
defn same-parity[l & p]
(defn iter[l m] (cond (empty? m) nil
(= (even? l) (even? (first m))) (cons (first m) (iter l (rest m)))
:esle (iter l (rest m))
)
)
(cons l (iter l p))
)
执行结果如下图
完全符合题目要求。