在scheme中传递多维列表指针

时间:2015-03-19 11:20:05

标签: list multidimensional-array scheme declaration using

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

使用它
(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)))

等。

因为你聪明且经验丰富的阴谋家可以看到它不起作用。 我怀疑"大名单"显然需要在声明和访问方面做一些特殊的处理(非法功能!),恐怕我已经在网上搜索了一些但却无法找到指导。

有什么样的灵魂请帮帮忙?

1 个答案:

答案 0 :(得分:0)

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)