Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-01-25

Getting Started in *LISP (1)

| 18:01 | Getting Started in *LISP (1) - わだばLisperになる を含むブックマーク はてなブックマーク - Getting Started in *LISP (1) - わだばLisperになる

*LISPのシミュレータに何か魅かれるものがあるので、とりあえずGetting Started in *LISPというチュートリアルを試してみることにしました。

Chapter 1. Instant *LISP

1章では、セル・オートマトンを作ってみるようです。

序盤で、セル・オートマトンの解説があって、次に*LISPの使用方法について。実機もシミュレータも、

(*lisp)
(*cold-boot :initial-dimensions '(16 16))

のような感じでスタートさせます。

  • 1.2 Using *Lisp
  • 1.2.1 Defining an Automata Grid

とりあえず、セル・オートマトンの実習開始

(*defvar *automata-grid* 0)
*AUTOMATA-GRID*

でグリッドを作成。初期値は、0

(ppp *automata-grid* :mode :grid :end '(8 5))
;=>
;     DIMENSION 0 (X)  ----->
;
;0 0 0 0 0 0 0 0 
;0 0 0 0 0 0 0 0 
;0 0 0 0 0 0 0 0 
;0 0 0 0 0 0 0 0 
;0 0 0 0 0 0 0 0 

pppは、pretty-print-pvarの略で、グリッドの内容を綺麗に整形して表示してくれます。

その前にpvarですが、parallel variableの略です。

操作に便利なユーティリティを色々と定義しつつ、関数を紹介

  • viewたん
(defun view (&optional (width 8) (height 5))
  (ppp *automata-grid* :mode :grid :end (list width height)))

グリッドを表示するためユーティリティ

  • read-cell
(defun read-cell (x y)
  (pref *automata-grid* (grid x y)))

(read-cell 5 1)
;=>0

一個のセルを表示するユーティリティ。

prefはpvarと、位置情報を引数に取って指定した位置の内容を返すもの。aref的なもの。

gridは、xとyから位置情報を生成する関数の模様。

  • set-cell
(defun set-cell (x y newvalue)
  (*setf (pref *automata-grid* (grid x y)) newvalue))

セルの内容を設定するユーティリティ

*setfは、pvarを操作するためのsetfのようなもので、感覚的にはsetf。

(set-cell 5 1 7)

(read-cell 5 1)
7

(view 8 3)
;=>
;     DIMENSION 0 (X)  ----->
;
;0 0 0 0 0 0 0 0 
;0 0 0 0 0 7 0 0 
;0 0 0 0 0 0 0 0 
  • set-grid
(defun set-grid (newvalue)
  (*set *automata-grid* newvalue))

グリッド全体の値を設定するユーティリティの模様。

*setは、setqのpvar版の模様。

(set-grid 7)

(view 8 3)
;
;     DIMENSION 0 (X)  ----->
;
;7 7 7 7 7 7 7 7 
;7 7 7 7 7 7 7 7 
;7 7 7 7 7 7 7 7 

;; 乱数で埋めてみる
(set-grid (random!! 10))

(view 8 3)
;     DIMENSION 0 (X)  ----->
;
;5 4 0 6 5 2 3 1 
;3 9 6 2 0 1 5 1 
;4 9 9 0 7 6 6 6 

random!!は、通常の(random x)の並列版で、返り値として全体のpvarを返すもの。