mc #5430(2008/01/23 08:03 GMT) [ Common Lisp ] Rating2/2=1.00
see: Simulator for *Lisp language for Connection Machine, circa 1989.
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))
Rating2/2=1.00-0+
[ reply ]
mc
#5430()
[
Common Lisp
]
Rating2/2=1.00
使用しています。
前回投稿したバージョンは、並列実行の構文を活用できていませんでしたが、
何となく構文が分かって来たので再挑戦してみました。
実行例(初期値をランダムに設定してループ表示):
; 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
see: Simulator for *Lisp language for Connection Machine, circa 1989.
(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))Rating2/2=1.00-0+
[ reply ]