Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 如何在一个子句中测试2个条件?_Scheme - Fatal编程技术网

Scheme 如何在一个子句中测试2个条件?

Scheme 如何在一个子句中测试2个条件?,scheme,Scheme,我需要创建一个子函数,它将返回我在Scheme中需要的所有相邻节点。我对scheme还不熟悉,不知道如何将两个条件组合成一个测试用例 基本上,我的算法是测试节点是否在边缘。在这种情况下,我使用5x5网格 如果两个节点都在拐角处,意味着两者都等于1或5,那么我将只有2个相邻节点。 如果只有一个节点击中边缘,我将有3个节点返回值。 如果节点周围没有边,我将返回4个节点 我的问题是如何将两个测试用例放在一个子句中 (define (neighbors l w) (if (= 1 l) and (=

我需要创建一个子函数,它将返回我在Scheme中需要的所有相邻节点。我对scheme还不熟悉,不知道如何将两个条件组合成一个测试用例

基本上,我的算法是测试节点是否在边缘。在这种情况下,我使用5x5网格

如果两个节点都在拐角处,意味着两者都等于1或5,那么我将只有2个相邻节点。 如果只有一个节点击中边缘,我将有3个节点返回值。 如果节点周围没有边,我将返回4个节点

我的问题是如何将两个测试用例放在一个子句中

(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”和“除非”就很简单了。请查看修改后的答案。