我正在尝试编写一个名为precedes的迭代过程,它从列表中输入一个标识符列表和两个标识符,如果第一个标识符出现在第二个之前,则返回#t,否则返回#f。
这是我的代码。
json.loads
此过程的示例输出为(define (precedes id1 id2 lst)
(define (iter lst n x)
(cond ((null? lst) #f)
((eq? (car lst) n) #t)
(else (iter (cdr lst) (+ 1 n) x))))
(iter '() 0 1))
感谢。
答案 0 :(得分:0)
(define (precedes id1 id2 lst)
(define (iter lst foundid1)
(printf "~a ~a\n" lst foundid1) ; for debugging
(cond ((null? lst)
#f) ; never found id2 so #f
((eq? (car lst) id2)
foundid1) ; found id2 so result is whether we found id1 before
((eq? (car lst) id1)
(iter (cdr lst) #t)) ; found id1 so iterate, set found flag to #t
(else
(iter (cdr lst) foundid1)))) ; found nothing, iterate
(iter lst #f))
以及输出:
> (precedes 'e 'c '(d b e a c g f))
(d b e a c g f) #f
(b e a c g f) #f
(e a c g f) #f
(a c g f) #t
(c g f) #t
#t
> (precedes 'x 'c '(d b e a c g f))
(d b e a c g f) #f
(b e a c g f) #f
(e a c g f) #f
(a c g f) #f
(c g f) #f
#f
> (precedes 'x 'y '(d b e a c g f))
(d b e a c g f) #f
(b e a c g f) #f
(e a c g f) #f
(a c g f) #f
(c g f) #f
(g f) #f
(f) #f
() #f
#f