需要#t但要获得第一个元素(Scheme)

时间:2012-12-02 15:38:42

标签: scheme

我认为我几乎已经完成了以前问题的解决方案:Foldr in scheme但在代码中是一个小问题。我需要#t但我得到第一个元素,假可以。这是我的代码:

(define accum
  (lambda (list1 pre?)
    (foldr (lambda (x y)
             (if y
                 (if (or (equal? y #t) (pre? x y))
                     x
                     #f)
                 #f))
           #t
           list1)))

(accum '(1 2 3 4) <=) --> 1 (should be #t)
(accum '(2 2 4 4) <=) --> 2 (should be #t)
(accum '(1 2 5 4) <=) --> #f
(accum '(5 7 2 3) <=) --> #f

如果我写“x - &gt; #t”,我总是得到#t,即使是#f。

1 个答案:

答案 0 :(得分:2)

好吧,你总是可以用另一个返回正确类型的过程包装结果:

(define (accum? list1 pre?)
  (if (accum list1 pre?) #t #f))