【发布时间】:2017-01-13 08:33:08
【问题描述】:
我刚开始学习 Racket,所以我仍在尝试找出语言的复杂性。我正在尝试在列表中实现我自己的搜索功能。如果函数找到它,则返回索引,否则返回-1。
(define (find-index list item)
(if (equal? (length list) 1)
(if (equal? (first list) item) 0 1)
(if (equal? (first list) item)
0
(+ 1 (my-search (rest list) item)))))
所以 find-index 函数是一个递归函数,它遍历列表以查找与“项目”等效的项目。我这样写,如果列表中有 4 个元素,该函数可以返回 0-4 之间的任何数字。
(define (my-search list item)
(define length (my-length list))
(define index (find-index list item))
(if (= index length) -1 index))
我的想法是,如果 find-index 函数返回一个等于列表长度的数字,则表示该函数没有找到该项目,因此 my-search 函数应该返回 -1。
但是,当我输入
(my-search (list "apple" "barbecue" "child" "demon" "enter") "fire")
我得到的结果是 3,而不是 -1。如果我在 if 语句之前打印索引,则索引是 3 而不是 5。如果
(if (= index length) -1 index))
不是我的搜索功能的一部分,那么一切都很好。
我认为 index 是函数本身的 id,而不是函数的结果。但是,我不明白为什么这会影响 my-search 的返回结果。有人愿意解释一下这个问题吗?
此外,欢迎任何风格批评。我想知道我是否不遵守约定。
【问题讨论】:
标签: if-statement scheme racket