Scheme 如何在一个子句中测试2个条件?
我需要创建一个子函数,它将返回我在Scheme中需要的所有相邻节点。我对scheme还不熟悉,不知道如何将两个条件组合成一个测试用例 基本上,我的算法是测试节点是否在边缘。在这种情况下,我使用5x5网格 如果两个节点都在拐角处,意味着两者都等于1或5,那么我将只有2个相邻节点。 如果只有一个节点击中边缘,我将有3个节点返回值。 如果节点周围没有边,我将返回4个节点 我的问题是如何将两个测试用例放在一个子句中Scheme 如何在一个子句中测试2个条件?,scheme,Scheme,我需要创建一个子函数,它将返回我在Scheme中需要的所有相邻节点。我对scheme还不熟悉,不知道如何将两个条件组合成一个测试用例 基本上,我的算法是测试节点是否在边缘。在这种情况下,我使用5x5网格 如果两个节点都在拐角处,意味着两者都等于1或5,那么我将只有2个相邻节点。 如果只有一个节点击中边缘,我将有3个节点返回值。 如果节点周围没有边,我将返回4个节点 我的问题是如何将两个测试用例放在一个子句中 (define (neighbors l w) (if (= 1 l) and (=
(define (neighbors l w)
(if (= 1 l) and (= 1 w)
(display l w))) --at top left corner
这里我想计算l和w是否都等于1。现在这不起作用,因为我不能在语法中使用“and”“or”这样的关键字,也不能使用&或+组合它们。有什么想法吗?或者我应该做点别的事?你试过这个吗:
(define (neighbors l w)
(if (and (= 1 l) (= 1 w))
(display l w))) --at top left corner
因为当我查看时,它似乎是这样工作的,当和除非比如果更方便时,当只有一个分支到条件:
(define (neighbors l w)
(when (and (= 1 l) (= 1 w))
(display l)
(display #\space)
(display w)
(newline)))
请注意,when的分支是隐式begin,而if需要显式begin,前提是它的任一分支具有多个表单
并非所有的方案都有预定义的时间和除非,因为R5R中没有指定它们。很容易将它们定义为宏:
(define-syntax when
(syntax-rules ()
((_ test expr1 expr2 ...)
(if test
(begin
expr1
expr2 ...)))))
(define-syntax unless
(syntax-rules ()
((_ test expr1 expr2 ...)
(if (not test)
(begin
expr1
expr2 ...)))))
正确的!!谢谢works,我也应该使用相同的参数来显示,注意显示不接受两个整数参数。要获得所需的输出,代码应该是:(display l)(display#\space)(display w)mm在我看来,“when”是一个欠定义的引用标识符。这不是我的库中的本机buildin scheme函数:(@FS如果您的方案中没有“when”和“除非”,那么添加“when”和“除非”就很简单了。请查看修改后的答案。