2015-03-19 3 views
1

Я пытаюсь объявить многомерный список и использовать его по ссылке (по схеме)Передача многомерного указателя списка в схеме

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

и т.д ..

Как вам мудрым и опытные махинаторы могут видеть не работает. Я подозреваю, что «большой список», очевидно, нуждается в особом обращении в декларации и доступе (нелегальная функция!), И я боюсь, что я просмотрел веб-страницы, но не смог найти руководство.

Любые добрые души, пожалуйста, помогите?

+0

искренние извинения за опечатку multimensional в заголовке сообщения. – user3103574

+0

Исправлено это для вас. – soegaard

ответ

0

Синтаксис 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)) Здесь перемещается в тело Выпускаемое.

Альтернативой является использование 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) 
+0

Спасибо, Согаар. Отлично работает. Я решил пойти с (определить подход, я также узнал что-то очень интересное о поведении (автомобиль). Не инкапсулируя имя списка в parens, вы помогли мне избежать ошибочной ошибки функции. Функция будет использовать инкапсулированный подход к -возвращению - указатель списка на автомобиль для «разыменования» подходящего назначения переменной или использования. Превосходное обучение сегодня. – user3103574