1

私は以前の問題でほぼ解決したと思います:スキームではFoldrですが、コードでは小さな問題です。#tが必要ですが、最初の要素を取得します。falseは問題ありません。これが私のコードです:

(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」と書くと、たとえ#fであっても、常に#tを取得します。

4

1 に答える 1

2

さて、あなたはいつでも正しいタイプを返す別のプロシージャで結果をラップすることができます:

(define (accum? list1 pre?)
  (if (accum list1 pre?) #t #f))
于 2012-12-02T18:44:28.870 に答える