(defclass schedule()
((day :accessor schedule-day :initarg :day)))
(setf october
(make-array '(31)
:element-type 'schedule
:initial-element
(make-instance 'schedule :day 0)))
(setq searcher (read))
(setf (schedule-day (aref october (- searcher 1))) searcher)
(dotimes (i 31)
(format t "-month:10 day:~S~%" (schedule-day (aref october i))))
這是我10月的計劃程序的一部分。 這部分應該在我打字的那一天,改變那天的元素,並打印每個十月的時間表。無法修改對象數組中的特定元素
然而,
(setq searcher (read))
(setf (schedule-day (aref october (- searcher 1))) searcher)
我有這個煩惱。如果我輸入17,那麼只有october
17日應該受到影響,印像這樣,
-month:10 day:0
-month:10 day:0
...
-month:10 day:17
-month:10 day:0
...
但是我真正得到的是
-month:10 day:17
-month:10 day:17
-month:10 day:17
...
爲什麼我不能只有一個元素改變?我能夠做到這一點類似於C++,
october[searcher - 1].setDay(searcher);
看來setf
影響了類本身,而不是類對象。你可以幫我嗎?謝謝。
請修復parens和indentation。您的代碼現在無法閱讀。 – sds
我認爲現在可以嗎?它只是一個類和一個make-array:p – user3026854
如果提供了初始元素,它將用於初始化新數組中的每個元素(使用與你相同的對象) – FrankS101