在以下代码中:
(define (memberi sl item (i 0))
(cond
[(empty? sl) #f]
[(equal? (first sl) item) i]
[(memberi (rest sl) item (add1 i))]
))
(define tstlst (list 1 2 3 4 3 5 2 6 2 6 8 5 3 9 2 4 2 5))
(println (memberi tstlst 10))
输出继电器
#<void>
为什么这个函数返回void而不是false,如在memberi fn?
中编码的那样答案 0 :(得分:4)
原因是在cond
的最后一种情况下,(memberi ...)
是测试,如果是真的则不返回任何内容,因为没有任何内容跟随它。
只需将功能更改为:
(define (memberi sl item (i 0))
(cond
[(empty? sl) #f]
[(equal? (first sl) item) i]
[else (memberi (rest sl) item (add1 i))]))