在方案中传递多维列表指针

Passing a multidimensional list pointer in scheme

我正在尝试声明一个多维列表并通过引用使用它(根据方案)

(let* (
      (big-list (list '(0 0 8 4 255 255) '(0 0 16 6 255 255)))
      (small-list 0) (v1 0) (v2 0) (v3 0)
      ))

(set! small-list (car(big-list)))

(set! v1 (car(small-list)))

(set! v2 (cadr(small-list)))

等..

正如你们这些聪明而有经验的策划者所看到的那样,它是行不通的。 我怀疑 "big-list" 显然需要在声明和访问方面进行一些特殊处理(非法功能!),恐怕我已经在网上搜索了一些但无法找到指导。

有好心人帮忙吗?

letlet*的语法是(let <bindings> <body>)。 绑定仅在正文中可用。您的示例变为:

(let* ((big-list (list '(0 0 8 4 255 255) '(0 0 16 6 255 255)))
       (small-list 0)
       (v1 0)
       (v2 0)
       (v3 0))
  (set! small-list (car big-list))
  (set! v1 (car small-list))
  (set! v2 (cadr small-list))

  (display "v1 ") (display v1) (newline)
  (display "v2 ") (display v2) (newline))

这里(set! v1 (car small-list))被移入了let的正文。

另一种方法是使用 define :

(define big-list (list '(0 0 8 4 255 255) '(0 0 16 6 255 255)))
(define small-list 0)
(define v1 0)
(define v2 0)
(define v3 0)

(set! small-list (car big-list))
(set! v1 (car small-list))
(set! v2 (cadr small-list))

(display "v1 ") (display v1) (newline)
(display "v2 ") (display v2) (newline)