【发布时间】:2023-04-05 17:30:02
【问题描述】:
我目前正在学习 Scheme,遇到一个问题,其描述如下:定义并实现一个函数,该函数采用逻辑运算符 check 和列表 xs 之类的东西,然后检查 (check a b) 是否评估为 true对于列表xs中的所有两个靠近元素ab。
下面的一些例子:
(check < '(15 16 17 18))
#t
(check > '(5))
#t
(check > '())
#t
(check (lambda (a b) (eq? b (+ a 1))) '(11 12 13))
#t
(check eq? '(4 4 5))
#f
在我看来,我认为这个类似于检查列表的问题是否按升序排序,但实现可能会有一些差异。
我打算定义一个与foldl 相关的递归函数并进行一些条件检查,但我的问题是如何检测逻辑运算符是什么以及它们如何在我的代码中工作,所以任何人都可以帮忙吗?提前谢谢你。
【问题讨论】:
-
这里要做的事情是尽早摆脱失败。你可以用 foldl 做到这一点吗?
-
“如何检测逻辑运算符是”有什么要检测的?你得到它,作为一个论据。您将其称为
(check a b),它会为您返回#f或#t。是的,如果你可以编写is-sorted谓词,这本质上是一回事。啊哈,我明白你的困惑在哪里。您将函数及其参数命名为相同的名称,check。将其重命名为(check-list < '(15 16 17 18)),并调用(check 15 16)、(check 16 17)等:(define (check-list check list) ...)。那么check可能是(lambda (a b) (eq? b (+ a 1)))。
标签: functional-programming scheme racket fold