【问题标题】:Apply logical and应用逻辑和
【发布时间】:2013-03-02 08:43:13
【问题描述】:

我有一个表情:(map some-proc some-list) 其计算结果为'(#f #f #f)

我想检查此列表中的所有布尔值是否为真。然而, (and '(#f #f #f)) 返回'(#f #f #f),而我注意#f

现在,如果我 (apply and '(#f #f #f)),我会收到错误消息: and: bad syntax in: and 在 DrRacket 环境中。这令人困惑,因为 Racket Reference 给出了 (apply + '(1 2 3)) 的示例,这似乎与我的问题相同。

我做错了什么以及如何从'(#f #f #f) 中取出我的#f

【问题讨论】:

    标签: boolean racket logical-operators


    【解决方案1】:

    您可以为此使用 andmap:

    > (andmap (lambda (x) x) '(#f #f #f))
    #f
    

    问题源于 and 不是一个过程,而是一个宏,以避免对其所有参数进行评估。

    不过,它可以在 Lazy Racket 中工作,其中 是一个过程。

    【讨论】:

    • 哇!感谢您的即时答复。然后我什至可以直接在初始表达式中使用它:(andmap some-proc some-list)
    【解决方案2】:

    只是另一种方式:

    (foldr (lambda(x y) (and x y)) #t '(#f #f #f))
    

    或者我将重写uselpa的解决方案(andmap):

    (andmap identity '(#f #f #f))
    

    【讨论】:

    • 不应该是 (foldr (lambda(x y) (and x y)) #t '(#f #f #f)) 吗?
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2010-11-30
    • 2013-04-12
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多