전환 된 행과 열이있는 배열 복사본을 만드는 방법을 찾으려고합니다.
그림자 배열에서 원래 배열로 포인터를 설정하여 항목 [2 1]이 항목 [1 2]을 가리 키도록하고 싶습니다.전환 된 행과 열이있는 배열의 섀도우 배열 만들기
포인터를 사용하면 원래 배열이 변경 될 때 그림자 배열에도 해당 변경 사항이 반영됩니다.
지금까지 배열의 모든 항목에 대해 길이 1의 변위 된 배열을 사용했습니다.
작동하지만 결과는 배열이있는 배열입니다.
내 질문에, 더 좋은 방법이 있나요?
그리고 섀도우 배열을 통해 setf를 사용하여 원래 배열의 값을 설정하는 방법이 있습니까? 지금까지
내 코드 :
(defun shadow-column-array (array)
(let* ((colsize (second (array-dimensions array)))
(rowsize (first (array-dimensions array)))
(b (make-array (list colsize rowsize))))
(dotimes (i rowsize b)
(dotimes (j colsize)
(setf (aref b j i)
(make-array 1
:displaced-to array
:displaced-index-offset (+ (* i rowsize) j)))))))
일부 출력 :
*a* => #2A((0.0 0.1 0.2) (1.0 1.1 1.2) (2.0 2.1 2.2))
(setq b (shadow-column-array (*a*))
*b* => #2A((#(0.0) #(1.0) #(2.0)) (#(0.1) #(1.1) #(2.1)) (#(0.2) #(1.2) #(2.2)))
열
난민 배열이 지금
col1 => #(#(0.0) #(1.0) #(2.0))
col2 => #(#(0.1) #(1.1) #(2.1))
col3 => #(#(0.2) #(1.2) #(2.2))