トップ «前の日記(2004-12-06) 最新 次の日記(2004-12-08)» 月表示 編集

日々の流転


2004-12-07 [長年日記]

λ. Hypersetの使い方

何か正しいExampleをとのことですが、Haskellレベルでの循環的な定義はサポートしてないので、循環的な定義をするには代わりに decorate :: (Ord u) => Graph -> Tagging u -> Decoration usolve :: 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} が得られます。

Tags: haskell

λ. ミーティング

誰も集まってくれないのは何故。しょぼーん。

λ. 『NHKにようこそ! 2』, 大岩 ケンヂ [画], 滝本 竜彦 [原作]

を読んだ。

Tags: