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-04-17

Getting Started in *LISP (5)

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

実に2ヶ月も間が空いてしまいました…。

もう、自分自身すっかり忘れてしまっていますが、

Getting Started in StarLispという*LISPのチュートリアルの実習をしています。

とりあえず、毎週木曜日には、このシリーズでエントリを書くことにしました。

1.2.4 Mortal or Immortal

前回までは、ムーア型とノイマン型のオートマトンを作成して様子を観察していましたが、今回は、それぞれ絶滅するパターンはあるか?を探るようです。

どうやって集計するかですが、*LISPには、*SUMというpvarの数を集計してくれる関数があるので、それを使います。

(*sum (signum!! *automata-grid*))

SIMD版signumで、0、1、-1に割り振って集計というわけですね。-1はありえないので、個体数を勘定するのに使えます。

それで、それをユーティリティとして定義してみます。

(defun deadp ()
  (zerop (*sum (signum!! *automata-grid*))))

これで、絶滅したかを確認することができます。ここで、zeropと、zerop!!の使い分けについての説明があります。

今回の場合、*sumは、PVARを返すわけではなく、スカラー値を返すので、zeropを使うのが適切とのこと。

これらを使って絶滅するパターンを探ってみよう、という感じです。

次回は、1.2.5からです。