为什么这个函数返回void而不是false

时间:2016-09-15 06:43:17

标签: scheme racket

在以下代码中:

(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?

中编码的那样

1 个答案:

答案 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))]))