2015-11-26 6 views
0

Мне нужно создать массив логических чисел (0 или 1) с размером 800000. Мне также нужно иметь возможность проверять/изменять значение по индексу всякий раз, когда я Можно. Я не могу использовать векторы или команду set!.(Scheme) Изменение значения в массиве булевых элементов с использованием списка

Я смотрел документацию и нашел build-list [1]. Так что я сделал массив нулей, как это:

(define arrBool (build-list 800000 (lambda (x) (* x 0))))

Я знаю, что я могу получить доступ к индексу с list-ref [2]. Однако я не могу найти ничего в документации о том, как изменить значение в этом индексе. Например, если я хочу изменить 0 с индексом 27392 на 1, как бы я сделал это, не создав нового списка?

Любая помощь будет оценена, спасибо!

+0

В списках Racket неизменяемы, поэтому вы не можете этого сделать. Вы должны использовать Racket, язык обучения или традиционную схему? – uselpa

+0

Мы должны использовать ракетку. Есть ли другой способ, которым я могу это сделать? Сначала я использовал векторы, но мой профессор не принял его, так как он хочет, чтобы мы использовали регулярные списки, поэтому я не понимаю, как это сделать. –

+0

Вы можете использовать коробки; Я сомневаюсь, что это намерение вашего профессора, но я отправлю пример. – uselpa

ответ

1

Вы можете использовать boxes хотя это неудобно:

> (define arrBool (build-list 20 (lambda (x) (box 0)))) 
> arrBool 
'(#&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0) 
> (set-box! (list-ref arrBool 2) 1) 
> (set-box! (list-ref arrBool 9) 1) 
> arrBool 
'(#&0 #&0 #&1 #&0 #&0 #&0 #&0 #&0 #&0 #&1 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0 #&0) 
> (unbox (list-ref arrBool 0)) 
0 
> (unbox (list-ref arrBool 2)) 
1 

EDIT

Чтобы установить некоторые индексы 1 при построении списка, сделайте

(define (make-list size indices-to-set) 
    (build-list size (lambda (i) (if (member i indices-to-set) 1 0)))) 

затем

> (make-list 20 '(2 9)) 
'(0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0) 
+0

Спасибо, к сожалению, он не хочет, чтобы мы использовали коробки (только что спросил). Хотя, я узнал что-то новое; так что это потрясающе! Могу ли я сделать это по-другому? При создании списка я могу установить определенные индексы в 1? –

+1

Если вам нужно использовать неизменяемые списки, вам нужно создать новый список каждый раз, когда вы хотите обновить элемент. – uselpa

+0

Он этого боялся; особенно учитывая размер списка. Однако, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^