我正在使用此代码来确保将列表放在一起,以便它可以与我正在编写的另一个函数一起使用。
#lang racket
(define path_from_start null)
(define path_stack null)
(define input1 '(0 0))
(define input2 '(1 2))
(define input3 '(3 1))
(define (test xy)
(set! path_from_start (append path_from_start (list xy)))
(display "path from start:") (display path_from_start)
(display "\n")
(set! path_stack (list path_from_start path_stack))
(display "path_stack")(display path_stack)
(display "\n")
;(set! path_stack (cdr path_stack))
;(display path_stack)
;(display "\n")
)
(test input1)
(test input2)
(test input3)
但是我得到了这个输出:
path from start:((0 0))
path_stack(((0 0)) ())
path from start:((0 0) (1 2))
path_stack(((0 0) (1 2)) (((0 0)) ()))
path from start:((0 0) (1 2) (3 1))
path_stack(((0 0) (1 2) (3 1)) (((0 0) (1 2)) (((0 0)) ())))
1st item on path_stack: '((0 0) (1 2) (3 1))
我不想在path_stack结束时使用空列表。它没有显示在path_from_start中。这可能是因为我正在形成path_stack。但我希望保留现在的括号格式。是否有另一个变量我可以将path_stack初始化为?
我已经查找了其他方法,但它们都打破了括号格式。我应该在第一步使用其中一种方法吗?把它扼杀在榜单中只有一个其他元素,所以我可以很容易地改革它?
感谢。
答案 0 :(得分:1)
(set! path_stack (list* path_from_start path_stack))
这是结果,我相信这解决了方括号的问题 - 问题中的示例输出似乎不正确:
path from start: ((0 0))
path_stack: (((0 0)))
path from start: ((0 0) (1 2))
path_stack: (((0 0) (1 2)) ((0 0)))
path from start: ((0 0) (1 2) (3 1))
path_stack: (((0 0) (1 2) (3 1)) ((0 0) (1 2)) ((0 0)))
现在我们可以回溯路径中的每一步,如下所示:
(first path_stack)
=> '((0 0) (1 2) (3 1))
(second path_stack)
=> '((0 0) (1 2))
(third path_stack)
=> '((0 0))