【问题标题】:Predicate true-for-all?谓词万能?
【发布时间】:2017-05-30 17:20:30
【问题描述】:

我一直试图在“简单方案”中理解这个练习 8.10,但在 Racket 博士中无法掌握它..

就是这个:写一个万能的谓词?这需要两个参数,一个谓词过程和一个句子。如果谓词参数对句子中的每个单词都返回 true,它应该返回 #t。

(万能的?甚至?'(2 4 6 8))

T

(万能的?甚至?'(2 6 3 4))

F

我尝试了解决方案:

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

但是 Racket 博士给出了 count: arity mismatch 之类的错误。 有没有人能够重写它或至少给出一些提示。非常感谢:)

最好的问候, 尤尼斯

【问题讨论】:

    标签: scheme racket predicate


    【解决方案1】:

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

    返回

    #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

    【讨论】:

    • 这真的很丰富,非常感谢@soegaard。但是是否也可以在不改变Scheme方言的情况下想出一个解决方案呢?
    • @euniceyoon 如果你找到完整的答案,不要忘记接受它(点击绿色复选标记)。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多