hp.pl vervangen door isHittingSet.pl en report en comments bij code bijgewerkt
[ker1415-1.git] / report / src / hs.pl
index 53f3158..597e2e6 100644 (file)
@@ -1,7 +1,21 @@
-isHittingSetTree(_, leaf).
-isHittingSetTree(_, node([], [])).
-isHittingSetTree(VisitedLabels, node([CurLabel|Labels], [CurChild|Children])) :-
-       not(member(CurLabel, VisitedLabels)),
-       append(VisitedLabels, [CurChild], UpdatedVisitedLabels),
-       isHSTree(UpdatedVisitedLabels, CurChild),
-       isHSTree(VisitedLabels, node(Labels, Children)).
+:- [diagnosis].\r
+%Function to add variable for uniqueness checking.\r
+isHittingSetTree(Tree) :-\r
+       isHittingSetTree2(Tree, []). \r
+\r
+%When the end of branch has been reached.\r
+isHittingSetTree2(leaf, _). \r
+%When a node turns empty. \r
+isHittingSetTree2(node([], []), _). \r
+%When a node isn't empty.\r
+isHittingSetTree2(node([CurLabel|Labels], [CurChild|Children]), VisitedLabels) :-\r
+       %Check if label has already been used up in the tree.\r
+       not(member(CurLabel,VisitedLabels)),\r
+       %Append label to list of checked labels\r
+       append(VisitedLabels, [CurLabel], UpdatedVisitedLabels), \r
+       %Recursively search into depth of branch.\r
+       isHittingSetTree2(CurChild, Appended), \r
+       %Recursively search into width of node.\r
+       isHittingSetTree2(node(Labels, UpdatedVisitedLabels), VisitedLabels).\r
+%If there are more or less labels then children, the tree will not match and \r
+%the function will rightfully report false.\r