习题2.20

 这个题本来很简单,但是我却花了很长时间,因为盲写的第一版代码,一直报奇怪的错误

第一次看见空指针异常,直接傻眼,看着执行出来的步骤,也没有什么奇怪的地方。实在找不到问题,一行行删除代码执行,直到下面的情况,居然还在报错。

 

这把我给整不会了,啥代码会这样?仔细看仔细看,原来是在函数定义的位置多了一对括号。

上面这个正确的代码应该是下面这种样子。多说一点,这里为啥要定义一个内部函数,主要是因为不定参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))
  )

 执行结果如下图

 完全符合题目要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值