2004-12-07 [長年日記]
λ. Hypersetの使い方
何か正しいExampleをとのことですが、Haskellレベルでの循環的な定義はサポートしてないので、循環的な定義をするには代わりに decorate :: (Ord u) => Graph -> Tagging u -> Decoration u
や solve :: Ord u => SystemOfEquations u -> Solution u
を使います。
decorate
はグラフのデコレーションを求める関数です。グラフの表現はData.Graphのものを使っていて、デコレーションは頂点をインデックス、集合を要素とする配列として表現しています。Tagging u
は子を持たない頂点に対して空集合ではなくurelementを割り当てるのに使うFiniteMapです。例えば、decorate (listArray (0,2) [[0,1,2],[],[]]) (unitFM 2 0) ! 0
とすると、A = {A,{},0} という集合が得られます。
solve
の方は等式系(system of equations)の解を求める関数です。等式系は、左辺の変数をインデックス、右辺の集合を要素とする配列で表現しています。ただ、右辺の集合はurelementとして変数を追加しているので、型が Set u
ではなく Set (Either u Var))
になってます。例えば A = {A,B,0}; B = {} という等式系は listArray (0,1) [fromList [Left (Right 0), Left (Right 1), Left (Left 0)], empty]
となります(あんまりにもあんまりなので、何とかしたいなぁ)。これを x
とすると、solve x ! 0
で先ほどと同じ集合 A = {A,{},0} が得られます。
λ. ミーティング
誰も集まってくれないのは何故。しょぼーん。
λ. 『NHKにようこそ! 2』, 大岩 ケンヂ [画], 滝本 竜彦 [原作]
を読んだ。