在方案中传递多维列表指针
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" 显然需要在声明和访问方面进行一些特殊处理(非法功能!),恐怕我已经在网上搜索了一些但无法找到指导。
有好心人帮忙吗?
let
和let*
的语法是(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)
我正在尝试声明一个多维列表并通过引用使用它(根据方案)
(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" 显然需要在声明和访问方面进行一些特殊处理(非法功能!),恐怕我已经在网上搜索了一些但无法找到指导。
有好心人帮忙吗?
let
和let*
的语法是(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)