“球拍计划无法正常工作

时间:2017-01-17 15:36:25

标签: scheme racket

我做了一个函数,它接受列表和列表的两个元素。如果第二个参数出现在第三个参数之前的list参数中,它应返回#t:

如果任何假定的元素都没有出现,那么该过程也应该返回#f。

这是我到目前为止所得到的:

(define (before-in-list? lst a b )
  (cond
  ((empty? lst ) #f)
  ((eq? (car lst ) a) ( map b (cdr lst)) #t)
  ((eq? (car lst ) b) #f)
  (else (before-in-list? (cdr lst ) a b ))))

测试它,我使用:

 (before-in-list? '(back in the ussr) '(in) '(ussr))
 (before-in-list? '(back in the ussr) '(the) '(ussr))
问题是它每次都给我f。

有关如何修复它的任何提示吗?

1 个答案:

答案 0 :(得分:1)

您使用map的方式没有意义。此外,您应该使用equal?进行更一般的比较,ab参数不应该是列表。试试这个:

(define (before-in-list? lst a b)
  (cond
    ((empty? lst ) #f)
    ((equal? (car lst) a)
     (if (member b (cdr lst)) #t #f))
    ((equal? (car lst) b) #f)
    (else (before-in-list? (cdr lst ) a b))))

(before-in-list? '(back in the ussr) 'in 'ussr)
=> #t
(before-in-list? '(back in the ussr) 'the 'ussr)
=> #t