2012-12-02 28 views
1

我想我已經差不多完成了解決方案與以前的問題:Foldr in scheme但在代碼中是一個小麻煩。我需要#t但是我得到第一個元素,false是可以的。這裏是我的代碼:需要#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 - > #t」,我總是得到#t,即使是#f。

回答

2

好了,你可以隨時返回正確類型的其他程序包的結果:

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

@奧斯卡·洛佩斯這是完美的,非常感謝你。 – Ats

+0

@歡迎您!那真是一個你必須在那裏解決的腦筋急轉彎,很棒的工作! :)。我明白這是一項家庭作業,你的解決方案是完美的,但要記住,在現實生活中,'foldr'可能不是解決這個問題的最佳選擇 - 它會繼續遍歷元素,即使在發現對於某些元素,條件不成立 –

+0

爲讀者提供一個額外練習:如果給定列表包含布爾值(如果pre?'希望得到這些布爾值),會發生什麼? 例如,什麼是應該在案件發生這樣的: '(定義(BOOL pnkfelix

相關問題