首页 文章

球拍程序无法正常工作

提问于
浏览
-1

我做了一个函数,它采用列表和列表的两个元素 . 如果第二个参数出现在第三个参数之前的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 回答

  • 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
    

相关问题