List 删除列表上的最后一个元素而不破坏括号格式(球拍)

List 删除列表上的最后一个元素而不破坏括号格式(球拍),list,scheme,racket,List,Scheme,Racket,我使用这段代码来确保列表被放在一起,这样它就可以与我正在编写的另一个函数一起工作 #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

我使用这段代码来确保列表被放在一起,这样它就可以与我正在编写的另一个函数一起工作

#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_堆栈的末尾。从路径开始,它不会显示在路径中。这可能是因为我形成路径堆栈的方式。但我想保留我现在的括号格式。是否还有其他变量可以初始化path_堆栈

我查找了其他方法,但它们都打破了括号格式。我应该在第一步就使用其中一种方法吗?在列表中只包含一个其他元素的情况下将其扼杀在萌芽状态,以便我可以轻松地修改它


谢谢。

试试这个,在第二套
使用,而不是:

结果如下,我相信这解决了括号中的问题-问题中的示例输出似乎不正确:

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))

这不是关于数组的问题,您使用的是链表。我删除了“arrays”标记。而且
path\u stack
中的括号似乎有问题,只有第一个元素看起来是正确的。看我的答案,我相信这就是你一开始想做的。是的,你是对的,我甚至没有注意到。。。。列表*为我修复了几乎所有的问题。谢谢,太好了!永远是我的荣幸:)
(first path_stack)
=> '((0 0) (1 2) (3 1))
(second path_stack)
=> '((0 0) (1 2))
(third path_stack)
=> '((0 0))