トップ «前の日記(2005-09-27 [J]) 最新 次の日記(2005-09-29 [J])» 編集

niche diary

2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|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|04|11|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|
半期 四半期 全カテゴリ
Teeda OLUG Java-Kuche
[HOME] [AGILE] [OBJECT] [PROGRAMMING] [JAVA] [LINUX] [OKINAWA] [BBS] [DIARY]

2005-09-28 [J] [長年日記]

_Rule Engine

沖縄に戻って次の出張までどうやらボケボケして良いみたいなので、Jess入門でもしてみようかと思っていたら、Jessってライセンスフリーではないのね。(T_T)

つーか、実はLispを勉強していたのは、Jessの為であったりなかったりなのに。

むぅ。JessじゃなくDrools入門しようかなぁ?でもhttp://java.sun.com/developer/technicalArticles/J2SE/JavaRule.htmlとかJess使ってるんだよなぁ。

_[book]宮大工棟梁・西岡常一 「口伝」の重み

電車で読んでいる人を見かけた。面白そうだなぁ。これは買いかも。

_[Lisp][Tech]フィジカル

昨日の続きから。

まずは、父・母…のべき集合を求めてみます。

>(setf sstate '(f m s1 s2 d1 d2 ma dg))
>(powerset sstate)
((F M S1 S2 D1 D2 MA DG) (DG S1 MA M D2 F D1) (DG S2 MA M D2 F D1)
 (DG S2 MA S1 D2 F D1) (DG S2 MA S1 D2 M D1) (DG S1 MA M D2 F S2)
 (DG S1 MA M D1 F S2) (DG S1 D2 M D1 F S2) (MA S1 D2 M D1 F S2)
...中略...
 (S1 D1) (M D1) (F D1) (D1 D2) (S2 D2) (S1 D2) (M D2) (F D2) (D2 MA) (D1 MA)
 (S2 MA) (S1 MA) (M MA) (F MA) (MA DG) (D2 DG) (D1 DG) (S2 DG) (S1 DG) (M DG)
 (F DG) (DG) (MA) (D2) (D1) (S2) (S1) (M) (F) NIL)

あってるのか?まぁいいや。ここはあっていると仮定して次に進みます。

この組み合わせからremove-ifを使って、不正な状態を削除します。

不正な状態をチェックするtest-eat関数を定義します。

(defun test-eat(x)
	(let ((feat (and (intersection x '(d1 d2)) (member 'f x) (null (member 'm x))))
		(meat (and (intersection x '(s1 s2)) (member 'm x) (null (member 'f x))))
		(dogeat (and (intersection x '(f m s1 s2 d1 d2)) (member 'dog x) (null (member 'ma x)))))
		(if (or feat meat dogeat)
			(return-from test-eat t))
	nil))

で、remove-ifを適用。

>(remove-if #'test-eat ps))
((F M S1 S2 D1 D2 MA DG) (DG S1 MA M D2 F D1) (DG S2 MA M D2 F D1)
 (DG S1 MA M D2 F S2) (DG S1 MA M D1 F S2) (DG S1 D2 M D1 F S2)
 (MA S1 D2 M D1 F S2) (S1 D2 M D1 F S2) (S1 MA M D1 F S2) (S1 DG M D1 F S2)
...中略...
 (S1 F M) (F M) (F S1) (S1 S2) (F S2) (S2 D1) (S1 D1) (M D1) (D1 D2) (S2 D2)
 (S1 D2) (M D2) (D2 MA) (D1 MA) (S2 MA) (S1 MA) (M MA) (F MA) (MA DG) (D2 DG)
 (D1 DG) (S2 DG) (S1 DG) (M DG) (F DG) (DG) (MA) (D2) (D1) (S2) (S1) (M) (F)
 NIL)

これまたあってんのかなぁ?とりあえず次!

次は父・母…のボート上の組み合わせを考えます。この組み合わせを求めるには、昨日作成したall-subset関数が使えます。

>(all-subset 2 sstate)
((F M) (M S1) (F S1) (S1 S2) (M S2) (F S2) (S2 D1) (S1 D1) (M D1) (F D1)
 (D1 D2) (S2 D2) (S1 D2) (M D2) (F D2) (D2 MA) (D1 MA) (S2 MA) (S1 MA) (M MA)
 (F MA) (MA DG) (D2 DG) (D1 DG) (S2 DG) (S1 DG) (M DG) (F DG))

ボート上の不正な状態を取り除くためにこれまた不正な状態をチェックする関数、test-rowを定義してremove-if-notを適用します。

(defun test-row(x)
	(or (member 'f x) (member 'm x) (member 'ma x)))
>(remove-if-not #'test-row bs)
((F M) (M S1) (F S1) (M S2) (F S2) (M D1) (F D1) (M D2) (F D2) (D2 MA) (D1 MA)
 (S2 MA) (S1 MA) (M MA) (F MA) (MA DG) (M DG) (F DG))

さて、ここまでくれば求めた各状態を線形につないでいてば回答が求められそうですが、その処理がぱっと思いつかない。orz...

とりあえず疲れたので続きはまた今度。

本日のツッコミ(全4件) [ツッコミを入れる]
_ また (2005-09-28 [J] 21:43)

いちびり根性も無い、しょーもないツッコミかもしれませんが、、、<br>「沖縄の戻って」は「沖縄に戻って」のことでしょうか。

_ t-doi (2005-09-28 [J] 21:56)

修正しました。ご指摘感謝です!

_ gogo_goyah (2005-09-28 [J] 22:50)

前に西岡常一著の「木のいのち木のこころ(天)」を読んだことがあります。結構好きな本でした。

_ t-doi (2005-09-29 [J] 08:47)

ほほう>木のいのち木のこころ(天)<br>それも買いですかねぇ。

[]

[HOME] [AGILE] [OBJECT] [PROGRAMMING] [JAVA] [LINUX] [OKINAWA] [BBS] [DIARY]