gpt4 book ai didi

functional-programming - (方案)检查项目列表是否都满足逻辑关系

转载 作者:行者123 更新时间:2023-12-02 09:10:28 26 4
gpt4 key购买 nike

我目前正在研究Scheme,遇到一个问题,其描述如下:定义并实现一个函数,该函数采用逻辑运算符check和列表xs,然后检查列表 xs 中靠近元素 a b 的所有两个 (check a b) 的计算结果是否为 true .

下面的一些例子:

(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 相关的递归函数并进行一些条件检查,但我的问题是如何检测哪个逻辑运算符以及它们如何在我的代码中工作,因此任何人都可以提供帮助它?预先感谢您。

最佳答案

有两种简单情况,该函数可以返回 true,即空列表和具有单个元素的列表。您可以使用 null? 检查空列表。您需要首先检查列表是否为空,如果不是,则检查其子列表是否为空(在这种情况下必然只有一个元素)。如果这些列表中的任何一个为空,则谓词通常会返回 true。

否则,在一般情况下,仅当 check 适用于一对元素(该对存在,因为我们排除了大小为 0 和 1 的列表)时,谓词才可能返回 true,并且如果子列表也满足谓词。

(define (every-pair-check? check xs)
(or (null? xs)
(null? (cdr xs))
(and (check (car xs) (cadr xs))
(every-pair-check? check (cdr xs)))))

关于functional-programming - (方案)检查项目列表是否都满足逻辑关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52908170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com