我注意到几乎所有方案函数只能返回一个列表作为输出。
下面,我想返回邻居的所有相邻节点的多个值。
(define (neighbors l w)
(if (and (= 1 l) (= 1 w))
(list (and (l (+ 1 w))) (and (+ 1 l) w)))) ; how to output 2 or more values?
在这种情况下,我首先测试节点是否位于角点,如果是,则返回 2 个坐标值,其中 (l 和 w+1)、(l+1 和 w) 基本上如果我位于 (1,1 )返回我(1,2)和(2,1)
当节点在边缘附近只有 1 个邻居时,同样适用,在这种情况下,我将有 3 个值。
当附近没有边缘时,我将有 4 个返回值。
我尝试使用cons, append, list, display, write
他们似乎都没有使用额外的价值。我需要这个作为子功能这个问题 https://stackoverflow.com/questions/1575891/question-on-scheme-with-best-first-search-algorithm。我应该如何实现它,以便我可以传递返回值并递归地使用它来返回所有相邻节点?
Edit:我找到了答案:使用关键字“values
" 返回多个值。示例:
(define (store l w)
(values (write l)
(write w)
(newline)
(list (+ 1 w) l)
(list w (+ 1 l))))
值、连续传递样式和列表至少是三种返回多个值的方式:
(import (rnrs))
; let-values + values
(define (foo1)
(values 1 2 3))
(let-values (((a b c) (foo1)))
(display (list a b c))
(newline))
; cps
(define (foo2 k)
(k 1 2 3))
(foo2 (lambda (a b c)
(display (list a b c))
(newline)))
; list
(define (foo3)
(list 1 2 3))
(let ((result (foo3)))
(display result)
(newline))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)