我需要创建一个子函数,它将返回我在Scheme中this question所需的所有相邻节点。我是计划新手,不确定如何将两个条件合并为一个测试用例?
基本上我的算法是测试节点是否在边缘。这种情况我使用5x5网格。
如果两个节点都在拐角处意味着两者都等于1或5,那么我将只有2个相邻节点。 如果只有一个节点被击中边缘,我将有3个节点返回值。 如果节点周围没有边缘,我将返回4个节点。
我的问题是如何将2个测试用例放在一个子句中?
(define (neighbors l w)
(if (= 1 l) and (= 1 w)
(display l w))) --at top left corner
这里我想评估l和w是否都等于1.现在这不起作用,因为我不能在语法中使用“和”或“或”这样的关键字,我也不能使用&或者+来组合它们。有任何想法吗 ?或者我应该做点什么?
答案 0 :(得分:8)
你试过这个:
(define (neighbors l w)
(if (and (= 1 l) (= 1 w))
(display l w))) --at top left corner
因为当我查看this时,它似乎是那样工作的
答案 1 :(得分:3)
当和,除非比 更方便,当条件只有一个分支时:
(define (neighbors l w)
(when (and (= 1 l) (= 1 w))
(display l)
(display #\space)
(display w)
(newline)))
注意当的分支是隐含的开始时,如果 需要显式的开始其分支机构有多种形式。
并非所有Schemes在和时都有,除非预定义,因为它们未在R5RS中指定。将它们定义为宏很容易:
(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 ...)))))