Comment detail

ライフゲーム (Nested Flatten)
Connection Machine用のLISP、*LISPのCL用シミュレータパッケージを
使用しています。
前回投稿したバージョンは、並列実行の構文を活用できていませんでしたが、
何となく構文が分かって来たので再挑戦してみました。

実行例(初期値をランダムに設定してループ表示):
;     DIMENSION 0 (X)  ----->
;
;0 1 1 1 1 1 1 1 1 1 
;1 0 1 0 1 1 1 0 0 1 
;1 1 0 1 1 1 1 0 0 0 
;0 0 1 1 1 1 0 0 1 0 
;1 1 0 0 1 0 1 1 0 0 
;1 0 1 1 1 0 1 1 0 1 
;1 0 0 0 1 0 1 1 1 1 
;0 1 1 0 0 0 1 1 1 0 
;0 0 0 0 1 1 0 0 0 1 
;0 1 1 1 1 0 0 0 1 0 
;
;     DIMENSION 0 (X)  ----->
;
;0 0 0 0 0 0 0 0 0 0 
;0 0 0 0 0 0 0 0 0 0 
;1 0 0 0 0 0 0 1 0 0 
;0 0 0 0 0 0 0 0 0 1 
;1 0 0 0 0 0 0 0 0 0 
;0 0 1 0 1 0 0 0 0 0 
;0 0 0 0 1 0 0 0 0 0 
;0 1 0 1 1 0 0 0 0 0 
;1 0 0 0 1 1 1 0 0 1 
;0 1 0 0 0 0 0 0 0 0 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
(defpackage :doukaku-126 (:use :cl :*lisp))
(in-package :doukaku-126)
(*cold-boot :initial-dimensions '(10 10))

(defconstant +alive+ 1)
(defconstant +dead+ 0)

(defun gen-next!! (pvar)
  (let ((env (count!! +alive+
              (vector!!
               (news!! pvar -1 -1) (news!! pvar -1  0) (news!! pvar -1  1)
               (news!! pvar  0 -1) (news!! pvar  0  1) 
               (news!! pvar  1 -1) (news!! pvar  1  0) (news!! pvar  1  1)))))
    (cond!! ((and!! (eql!! +dead+ pvar) (=!! env 3)) +alive+)
            ((and!! (eql!! +alive+ pvar) (<=!! 2 env 3)) +alive+)
            (t!! +dead+))))

;; 実行例(初期値をランダムに設定してループ表示):
(loop :for gen = (truncate!! (random!! 10) 5) :then (gen-next!! gen)
      :do (ppp gen) 
      :unless (y-or-n-p) :do (return))

Index

Feed

Other

Link

Pathtraq

loading...