谓词对所有人都是真的?

Predicate true-for-all?

我一直在努力理解 "simply scheme" 中的这个练习 8.10,但在 Dr Racket 中就是无法理解。

是这个:写一个 true for all 的谓词?它有两个参数,一个谓词过程和一个句子。它应该 return #t 如果谓词参数 return 对句子中的每个单词都是真的。

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

T

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

F

我尝试了解决方案:

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

但 Dr Racket 给出了计数错误:元数不匹配。 是否有人能够重写它或至少给出一些提示。非常感谢:)

此致, 尤尼斯

Racket 支持多种语言。因此所有程序都以 #lang 行开始,告诉 Racket 使用哪种语言。 Simply Scheme中使用的Scheme方言需要这一行:

#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))

returns

#t
#f

符合预期。

注意:在DrRacket左下角选择"Determine language from source"。

Simply Scheme 语言的文档在这里:http://planet.racket-lang.org/package-source/dyoo/simply-scheme.plt/2/2/planet-docs/manual/index.html

在纯 Racket 中有一个解决方案(仅用于上下文):

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