Tôi đang cố gắng chuyển đổi danh sách các danh sách; ý kiến của tôi chỉ ra quá trình suy nghĩ.Chuyển danh sách trong Common Lisp
(setq thingie '((1 2 3) (4 5 6) (7 8 9))) ;;test case
(defun trans (mat)
(if (car mat)
(let ((top (mapcar 'car mat)) ;;slice the first row off as a list
(bottom (mapcar 'cdr mat))) ;;take the rest of the rows
(cons top (trans bottom)))) ;;cons the first-row-list with the next-row-list
mat)
(trans thingie)
=> ((1 2 3) (4 5 6) (7 8 9)) ;;wait what?
Nhưng, tôi thực sự muốn nó được
((1 4 7) (2 5 8) (3 6 9))
Tôi đang làm gì sai?
Điều này được gọi là [ma trận transpose] (http://en.wikipedia.org/wiki/Transpose). – sds
@sds: ... yuuup. Tại sao tôi không thấy rằng 3 năm trước là vượt ra ngoài tôi. Hãy cho tôi một vài phút và tôi sẽ sửa lỗi này. –