2017-05-30 6 views
1

私はこのシンプルなスキーム8.10を理解しようとしていましたが、ラケット博士でそれを理解することはできません。述語true-for-all?

それは本当ですか?述語手続きと文の2つの引数を取る。述語引数が文中の全ての単語に対して真を返すならば、#tを返すべきです。

(真のために、すべての?も? '(2 4 6 8))

T

(真のために、すべての?も?'(2 6 3 4))

F

私は解決策を試してみました:

(送信されたPRED真のために、すべての(定義)?(=(count送信済み)(count(pres送信済み))))

しかし、Dr Racketはcount:arity mismatchのようなエラーを返します。 誰かがそれを書き換えたり、少なくともヒントを与えたりできますか?たくさん:)

よろしく、 ユーニス

答えて

0

ラケットは、多くの言語をサポートしおくります。したがって、すべてのプログラムは、使用する言語をラケットに伝える#lang行で始まります。単にスキームで使用されるスキームの方言は、この行を必要とします:

#lang planet dyoo/simply-scheme:2 

次のプログラム:

#lang planet dyoo/simply-scheme:2 

(define (true-for-all? pred sent) 
    (= (count sent) (count (keep pred sent)))) 

(true-for-all? even? '(2 4 6 8)) 

(true-for-all? even? '(2 6 3 4)) 

戻り予想通り

#t 
#f 

注:DrRacketの左下隅にある「ソースからの言語の決定」を選択してください。

単にSchemeの言語のドキュメントはここにある:http://planet.racket-lang.org/package-source/dyoo/simply-scheme.plt/2/2/planet-docs/manual/index.html

+0

本当に有益だった、あなたは非常に多くの@soegaardに感謝。 しかしSchemeの方言を変えずに解決策を考え出すことも可能ですか? –

+0

@euniceyoon回答が完了したら、それを受け入れることを忘れないでください(緑色のチェックマークを押す)。 – soegaard

0

(単にコンテキストの)純粋なラケットで解決策があります:

#lang racket 
(define (true-for-all? pred list) 
    (cond 
    [(empty? list) #t] 
    [(pred (first list)) (true-for-all? pred (rest list))] 
    [else #f]))