これは私のコードである:ハスケルのリストをチェックするには?
module Main where
import Data.Graph.Inductive
import Data.Graph.Inductive.Example
func :: Graph gr=> gr a b ->[Node]->Int-> [(Node,Int)]
func graph (x:xs) y
|indeg graph x == 0 = (x,y+1):func (delNode x graph) xs (y+1)
graph2:: Gr Int Int
graph2 = mkGraph (genLNodes 1 14)[(1,2,1),
(1,3,1),
(3,14,1),
(14,6,1),
(14,7,1),
(2,4,1),
(2,5,1),
(4,6,1),
(5,7,1),
(6,8,1),
(7,9,1),
(8,10,1),
(9,11,1),
(10,12,1),
(11,12,1),
(12,13,1),
(14,13,1)]
Graph2は14個のノードと、例えば(1,2,1)を意味し、1
funcが私のGraph2をとるの重量を有するノード1からノード2へのエッジを有します、トポロジカルソートの頂点およびいくつかの数たとえば0を返します。 Funcは、ノードの内向きの度合いが0に等しいかどうかをチェックし、xがIdNodeであり、真グラフx == 0が真のときにyが増加するタプルのリストを作成します。頂点は
を削除し、ここに私の問題ですが、私はより多くの頂点が0度を持っているかどうかを確認し、1
EDIT追加したいされています
関数は次のように行動しなければならない:
をtopsort:リスト内の各ノードの[1,3,14,2,5,7,9,11,4,6,8,10,12,13]
- チェックインバウンド度。
- degreeが0の場合は、パス長に1を加えます(ノード1のインバウンドは等しいのでパス長= 1)
- ノードをグラフから削除し、ノードを削除してノードのインバウンド度をチェックし、ステップ2.
継続例:私はパスの長さに1を追加で結合したので= 0
ノード1を除去した後、ノード2および3が持っている(パスな長さ=ノード2 2及び3)及びノード2とノード3を削除します。
現在、インバウンド度= 0は14,4,5です。したがって、lengに1を追加しますth(path lenght = 3)、これらのノードを削除します。
グラフのイメージが役立つことを願っています。あなたは非常に宣言深さを計算するために「タイ・ノット」の方法を使用することができ、遅延評価で
あなたが求めていることは明確ではありません。確かに「リストをチェックする」とはあまり関係がないように思われます。あなたが何をしようとしているのかを明確に記述して、定義したい関数の型シグネチャでもっとも良いものを記述してください。また、markdownを適切に使用してください。 '[(1,1)]'のようなインラインコードスニペットは、バッククイックで入力する必要があります。 '' 1( '[(1,1)]') ''を追加します。 _And_:例を最小限に保つようにしてください。この質問の目的のために、あなたのグラフは確かに単純ではありません。 – leftaroundabout