2012-05-12 21 views
0

請解釋[[[0]*64 for i in range(7)] for j in range(2)]部分以及如何編寫lisp等效代碼。請解釋這段python代碼以及如何在lisp中編寫等效代碼

pieceHashes = [[[0]*64 for i in range(7)] for j in range(2)] 
    for color in WHITE, BLACK: 
     for piece in PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING: 
      for cord in range(64): 
       pieceHashes[color][piece][cord] = randint(0, maxint) 

回答

4
(let ((piece-array (make-array '(2 7 64) :initial-element 0))) 
    (dolist (color `(,white ,black)) 
    (dolist (piece `(,pawn ,knight ,bishop ,rook ,queen ,king)) 
     (loop for cord below 64 
      do (setf (aref piece-array color piece cord) 
        (random maxint)))))) 
0

它生成一個具有64 x 7 x 2元素的三維數組。 然後在最後一行填入數組。

+0

什麼是編寫lisp等價物的好方法? – Mark

+0

該代碼顯然爲棋盤上不同位置的不同類型的棋子生成隨機散列值,並將它們存儲在一個大陣列中。 WHITE,BLACK,PAWN等等是映射到整數的符號常量。您可以使用(defconstant WHITE 0)(defconstant BLACK 1)等來定義CL中的符號常量,並使用(make-array 64 7 2)創建相應的數組。 –