[Reasoner4j-user] SF.net SVN: reasoner4j:[58] trunk/reasoner4j
Status: Pre-Alpha
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2012-03-11 09:50:42
|
Revision: 58
http://reasoner4j.svn.sourceforge.net/reasoner4j/?rev=58&view=rev
Author: luc_peuvrier
Date: 2012-03-11 09:50:34 +0000 (Sun, 11 Mar 2012)
Log Message:
-----------
WIP
Modified Paths:
--------------
trunk/reasoner4j/doc/todo.txt
trunk/reasoner4j/pom.xml
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultRuleDefinitionProvider.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/IRuleDefinitionProvider.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListRuleDefinition.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/IMotor.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestExpressionCompute.java
Added Paths:
-----------
trunk/reasoner4j/doc/compute.txt
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListFactMaskDefinition.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountAssertion.java
Removed Paths:
-------------
trunk/reasoner4j/doc/last_of_list.txt
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountRetract.java
Copied: trunk/reasoner4j/doc/compute.txt (from rev 55, trunk/reasoner4j/doc/last_of_list.txt)
===================================================================
--- trunk/reasoner4j/doc/compute.txt (rev 0)
+++ trunk/reasoner4j/doc/compute.txt 2012-03-11 09:50:34 UTC (rev 58)
@@ -0,0 +1,125 @@
+case of count assertion
+-----------------------
+
+compute koCount according to previous koCount value
+
+?X state ko
+?X koCount ?C, if not exist for a ?X then create fact (?X koCount 0)
+ (?X koCount 0) do not trigger other rules
+ not listening: do not react (?X koCount ?C) assertion
+?C increment ?NC (buitin: ?NC is value of ?C incremented by 1)
+=>
+?X koCount ?NC, replace object: for any ?OC retract (?X koCount ?OC)
+ before assert (?X koCount ?NC)
+
+--------------------------------------------------------------------------------
+
+case of last of list fact
+-------------------------
+
+ compute last of list according to list state:
+ ---------------------------------------------
+
+?LL containsLastOfList ?L
+?LL listRest ?LR
+?LR logNotEquals nil
+=>
+?LR containsLastOfList ?L
+
+?LL containsLastOfList ?L
+?LL listRest ?LR
+?LR logEquals nil
+?LL listFirst ?E
+=>
+?LR lastOfList ?E (replace object)
+
+ change list state according to last of list assertion:
+ ------------------------------------------------------
+
+?L lastOfList ?E, do not do retraction conclude.
+?LL containsLastOfList ?L
+?LL listRest ?LR
+?LR logEquals nil
+nil blankNode ?NLR
+=>
+?LL listRest ?NLR (replace object)
+?NLR listFirst ?E
+?NLR listRest nil
+
+if (?L lastOfList ?E) retracted
+?LE listFirst ?E
+?LE listRest nil
+?LP listRest ?LE
+=>
+(?LE listFirst ?E) retraction
+(?LE listRest nil) retraction
+(?LP listRest nil) assertion, replace object
+
+ list change notification
+ ------------------------
+
+ if (?L listFirst ?E) asserted
+ =>
+ (?L listChange nil) notification
+
+ if (?L listRest ?LR) asserted
+ =>
+ (?L listChange nil) notification
+
+ if (?L listChange nil) notification
+ if (?LP listRest ?L) asserted
+ =>
+ (?LP listChange nil) notification
+
+
+--------------------------------------------------------------------------------
+
+case of expression compute, sum of element of a list.
+-----------------------------------------------------
+
+ creating new list
+ -----------------
+
+ ?X value ?V
+ result valueList ?L if not exist for a ?L then create fact (result valueList nil)
+ (result valueList nil) do not trigger other rules
+ not listening: do not react (result valueList ?L) assertion
+ ?LV listFirst ?V asserted, always true
+ ?LV listRest nil asserted, always true
+ ?LL listFirst ?L asserted, always true
+ ?LL listRest ?LL2 asserted, always true
+ ?LL2 listFirst ?LV asserted, always true
+ ?LL2 listRest nil asserted, always true
+ ?LL listAppend ?LR builtin
+ =>
+ result valueList ?LR replace object
+
+ (?X value ?V) retracted
+ result valueList ?L default ?L=nil
+ ?LV listFirst ?V asserted
+ ?LV listRest nil asserted
+ ?LL listFirst ?L asserted
+ ?LL listRest ?LL2 asserted
+ ?LL2 listFirst ?LV asserted
+ ?LL2 listRest nil asserted
+ ?LL listRemove ?LR
+ =>
+ result valueList ?LR replace object
+
+ result list ?L
+ ?L listChange nil
+ ?L mathSum ?S
+ =>
+ result sum ?S
+
+ list change notification
+ ------------------------
+
+ result list ?L
+ ?L listChange nil
+ ?L mathSum ?S
+ =>
+ result sum ?S
+
+
+
\ No newline at end of file
Deleted: trunk/reasoner4j/doc/last_of_list.txt
===================================================================
--- trunk/reasoner4j/doc/last_of_list.txt 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/doc/last_of_list.txt 2012-03-11 09:50:34 UTC (rev 58)
@@ -1,25 +0,0 @@
-?LL containsLastOfList ?L
-?LL listRest ?LR
-?LR logNotEquals nil
-=>
-?LR containsLastOfList ?L
-
-?LL containsLastOfList ?L
-?LL listRest ?LR
-?LR logEquals nil
-?LL listFirst ?E
-=>
-?LR lastOfList ?E (replace object)
-
-?L lastOfList ?E
-?L lastOfList ?CE (not listening, default nil object)
-?E logNotSameAs ?CE
-?LL containsLastOfList ?L
-?LL listRest ?LR
-?LR logEquals nil
-nil blankNode ?NLR
-=>
-?LL listRest ?NLR (replace object)
-?NLR listFirst ?E
-?NLR listRest nil
-
Modified: trunk/reasoner4j/doc/todo.txt
===================================================================
--- trunk/reasoner4j/doc/todo.txt 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/doc/todo.txt 2012-03-11 09:50:34 UTC (rev 58)
@@ -46,6 +46,18 @@
- sort premise to better rete
- reuse common premise and merge table (take care with rule removing)
+presentation:
+-------------
+
+Bonjour
+
+J'ai pens\xE9 \xE0 vous en lisant cette pr\xE9s. de Jos , le cr\xE9ateur d' Euler:
+http://www.agfa.com/w3c/Talks/2011/01swig/
+
+--
+Jean-Marc Vanel
+
+
------------------------------------------------------------------------------------------------------------
-------------
Modified: trunk/reasoner4j/pom.xml
===================================================================
--- trunk/reasoner4j/pom.xml 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/pom.xml 2012-03-11 09:50:34 UTC (rev 58)
@@ -51,7 +51,7 @@
<connection>
scm:svn:http://reasoner4j.svn.sourceforge.net/svnroot/reasoner4j/trunk
</connection>
- <url>http://eulergui.svn.sourceforge.net/viewvc/eulergui/</url>
+ <url>http://reasoner4j.svn.sourceforge.net/viewvc/reasoner4j/</url>
</scm>
<issueManagement>
@@ -126,7 +126,7 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.15</version>
+ <version>1.2.16</version>
<!-- scope "compile" by default -->
<exclusions>
<exclusion>
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -57,6 +57,8 @@
public static final String LIST_REST_PREDICATE_IDENTIFIER = "listRest";
+ public static final String CONTAINS_LAST_OF_LIST_PREDICATE = "containsLastOfList";
+
public static final String LAST_OF_LIST_PREDICATE_IDENTIFIER = "lastOfList";
private TermIdentifierConstant() {
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultRuleDefinitionProvider.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultRuleDefinitionProvider.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultRuleDefinitionProvider.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -25,7 +25,9 @@
import java.util.LinkedList;
import java.util.List;
+import net.sf.reasoner4j.builtin.ruledef.ListFactMaskDefinition;
import net.sf.reasoner4j.builtin.ruledef.ListRuleDefinition;
+import net.sf.reasoner4j.fact.FactMask;
import net.sf.reasoner4j.rule.Rule;
/**
@@ -39,6 +41,8 @@
private List<Rule<T>> ruleList;
+ List<FactMask<T>> factMaskList;
+
@Override
public List<Rule<T>> getRules(
final IBuitinTermProvider<T> buitinTermProvider) {
@@ -48,4 +52,15 @@
}
return ruleList;
}
+
+ @Override
+ public List<FactMask<T>> getFactMask(
+ final IBuitinTermProvider<T> buitinTermProvider) {
+ if (factMaskList == null) {
+ factMaskList = new LinkedList<FactMask<T>>();
+ factMaskList.addAll(new ListFactMaskDefinition<T>(
+ buitinTermProvider));
+ }
+ return factMaskList;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/IRuleDefinitionProvider.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/IRuleDefinitionProvider.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/IRuleDefinitionProvider.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -24,6 +24,7 @@
import java.util.List;
+import net.sf.reasoner4j.fact.FactMask;
import net.sf.reasoner4j.rule.Rule;
/**
@@ -34,5 +35,7 @@
*/
public interface IRuleDefinitionProvider<T> {
+ List<FactMask<T>> getFactMask(IBuitinTermProvider<T> buitinTermProvider);
+
List<Rule<T>> getRules(IBuitinTermProvider<T> buitinTermProvider);
}
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListFactMaskDefinition.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListFactMaskDefinition.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListFactMaskDefinition.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2011 Luc Peuvrier
+ *
+ * This file is a part of reasoner4j.
+ *
+ * reasoner4j is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * reasoner4j is distributed in the hope that it will be useful, but
+ * unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.reasoner4j.builtin.ruledef;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.reasoner4j.builtin.TermIdentifierConstant;
+import net.sf.reasoner4j.builtin.provider.IBuitinTermProvider;
+import net.sf.reasoner4j.fact.FactMask;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+public class ListFactMaskDefinition<T> extends AbstractList<FactMask<T>> {
+
+ private final List<FactMask<T>> factMaksList = new ArrayList<FactMask<T>>();
+
+ public ListFactMaskDefinition(
+ final IBuitinTermProvider<T> buitinTermProvider) {
+ final T containsLastOfListTerm = buitinTermProvider
+ .getTerm(TermIdentifierConstant.CONTAINS_LAST_OF_LIST_PREDICATE);
+ final T listRestTerm = buitinTermProvider
+ .getTerm(TermIdentifierConstant.LIST_REST_PREDICATE_IDENTIFIER);
+ final T listFirstTerm = buitinTermProvider
+ .getTerm(TermIdentifierConstant.LIST_FIRST_PREDICATE_IDENTIFIER);
+ final T lastOfListTerm = buitinTermProvider
+ .getTerm(TermIdentifierConstant.LAST_OF_LIST_PREDICATE_IDENTIFIER);
+ factMaksList.add(new FactMask<T>(
+ /* subject */null, false,
+ /* predicate */containsLastOfListTerm, true,
+ /* object */null, true));
+ factMaksList.add(new FactMask<T>(
+ /* subject */null, true,
+ /* predicate */listRestTerm, true,
+ /* object */null, false));
+ factMaksList.add(new FactMask<T>(
+ /* subject */null, true,
+ /* predicate */listFirstTerm, true,
+ /* object */null, false));
+ factMaksList.add(new FactMask<T>(
+ /* subject */null, true,
+ /* predicate */lastOfListTerm, true,
+ /* object */null, false));
+ }
+
+ @Override
+ public FactMask<T> get(final int index) {
+ return factMaksList.get(index);
+ }
+
+ @Override
+ public int size() {
+ return factMaksList.size();
+ }
+
+}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListRuleDefinition.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListRuleDefinition.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/ruledef/ListRuleDefinition.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -43,14 +43,12 @@
*/
public class ListRuleDefinition<T> extends AbstractList<Rule<T>> {
- private static final String CONTAINS_LAST_OF_LIST = "containsLastOfList";
-
private final List<Rule<T>> ruleList = new ArrayList<Rule<T>>();
public ListRuleDefinition(final IBuitinTermProvider<T> buitinTermProvider) {
super();
final T containsLastOfListTerm = buitinTermProvider
- .getTerm(CONTAINS_LAST_OF_LIST);
+ .getTerm(TermIdentifierConstant.CONTAINS_LAST_OF_LIST_PREDICATE);
final T listRestTerm = buitinTermProvider
.getTerm(TermIdentifierConstant.LIST_REST_PREDICATE_IDENTIFIER);
final T listFirstTerm = buitinTermProvider
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/IMotor.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/IMotor.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/IMotor.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -53,7 +53,7 @@
*/
void addRule(Rule<T> rule);
- void addRule(IRuleDefinitionProvider<T> ruleDefinitionProvider);
+ void addRuleDefinition(IRuleDefinitionProvider<T> ruleDefinitionProvider);
void removeRule(Rule<T> rule);
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -159,10 +159,15 @@
}
@Override
- public void addRule(final IRuleDefinitionProvider<T> ruleDefinitionProvider) {
+ public void addRuleDefinition(
+ final IRuleDefinitionProvider<T> ruleDefinitionProvider) {
for (Rule<T> rule : ruleDefinitionProvider.getRules(buitinTermProvider)) {
addRule(rule);
}
+ for (FactMask<T> factMask : ruleDefinitionProvider
+ .getFactMask(buitinTermProvider)) {
+ addFactMask(factMask);
+ }
}
@Override
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -34,6 +34,7 @@
*
* @param <T>
*/
+// FIXMELUC AffectConclusion not needed
public class AffectConclusionNotifier<T> extends
AbstractReplaceConclusionNotifier<T> {
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -28,6 +28,7 @@
*
* @param <T>
*/
+// FIXMELUC AffectConclusion not needed
public class AffectConclusion<T> extends AbstractReplaceConclusion<T> {
public AffectConclusion(final String subjectVariableName, final T subject,
Copied: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountAssertion.java (from rev 55, trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountRetract.java)
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountAssertion.java (rev 0)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountAssertion.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -0,0 +1,117 @@
+package net.sf.reasoner4j;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import net.sf.reasoner4j.builtin.impl.AbstractBuiltin;
+import net.sf.reasoner4j.fact.Fact;
+import net.sf.reasoner4j.fact.IFact;
+import net.sf.reasoner4j.kb.IKnowledgeBase;
+import net.sf.reasoner4j.kb.MainKnowledgeBaseFactory;
+import net.sf.reasoner4j.motor.IMotor;
+import net.sf.reasoner4j.motor.MotorFactory;
+import net.sf.reasoner4j.rule.AffectConclusion;
+import net.sf.reasoner4j.rule.IPremise;
+import net.sf.reasoner4j.rule.Premise;
+import net.sf.reasoner4j.rule.PremiseAndDefault;
+import net.sf.reasoner4j.rule.ReplaceConclusion;
+import net.sf.reasoner4j.rule.Rule;
+
+import org.apache.log4j.Logger;
+
+public class TestCountAssertion extends AbstractTestCase {
+
+ private static final Logger LOGGER = Logger
+ .getLogger(TestCountAssertion.class);
+
+ public void testCountAssertion() {
+ final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
+ final MotorFactory<String> motorFactory = new MotorFactory<String>();
+ final IKnowledgeBase<String> kb = kbFactory.create();
+ final IMotor<String> motor = motorFactory.create(kb, this, this);
+ motor.addBuiltin(new IncrementBuiltin());
+ // first rule
+ Rule<String> rule = new Rule<String>();
+ // ?X state ko
+ IPremise<String> premise = new Premise<String>(
+ /* subject */"?X", null,
+ /* predicate */null, "state",
+ /* object */null, "ko");
+ rule.addPremise(premise);
+ // ?X koCount ?C
+ premise = new PremiseAndDefault<String>(
+ /* subject */"?X", null, null,
+ /* predicate */null, "koCount", null,
+ /* object */"?C", null, "0",
+ /* not listening */false);
+ rule.addPremise(premise);
+ // ?C increment ?NC
+ premise = new Premise<String>(
+ /* subject */"?C", null,
+ /* predicate */null, "increment",
+ /* object */"?NC", null);
+ rule.addPremise(premise);
+
+ // ?X koCount ?NC
+ // AffectConclusion do not retract conclusion
+ // AffectConclusion<String> conclusion = new AffectConclusion<String>(
+ ReplaceConclusion<String> conclusion = new ReplaceConclusion<String>(
+ /* subject */"?X", null, false,
+ /* predicate */null, "koCount", false,
+ /* object */"?NC", null, true);
+ rule.addConclusion(conclusion);
+ motor.addRule(rule);
+
+ motor.assertFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("first ko assert", kb);
+ assertNotNull(kb.get("myCar", "koCount", "1"));
+
+ motor.retractFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("ko retract", kb);
+
+ motor.assertFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("second ko assert", kb);
+ assertNotNull(kb.get("myCar", "koCount", "2"));
+ assertNull(kb.get("myCar", "koCount", "1"));
+
+ motor.retractFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("ko retract", kb);
+
+ motor.assertFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("third ko assert", kb);
+ assertNotNull(kb.get("myCar", "koCount", "3"));
+ assertNull(kb.get("myCar", "koCount", "2"));
+ }
+
+ private void logKoCount(final String title, final IKnowledgeBase<String> kb) {
+ if (LOGGER.isDebugEnabled()) {
+ final Iterator<IFact<String>> iterator = kb.view("myCar",
+ "koCount", null).iterator();
+ final StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append(title);
+ stringBuilder.append('\n');
+ while (iterator.hasNext()) {
+ stringBuilder.append(iterator.next());
+ stringBuilder.append('\n');
+ }
+ LOGGER.debug(stringBuilder.toString());
+ }
+ }
+
+ private class IncrementBuiltin extends AbstractBuiltin<String> {
+ public IncrementBuiltin() {
+ super(null, "increment", null);
+ }
+
+ @Override
+ public List<IFact<String>> compute(final int ruleIdentifier,
+ final String subject, final String predicate,
+ final String object) {
+ List<IFact<String>> result = new ArrayList<IFact<String>>(1);
+ result.add(new Fact<String>(subject, predicate, Integer
+ .toString(Integer.parseInt(subject) + 1)));
+ return result;
+ }
+ }
+}
Deleted: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountRetract.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountRetract.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestCountRetract.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -1,112 +0,0 @@
-package net.sf.reasoner4j;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import net.sf.reasoner4j.builtin.impl.AbstractBuiltin;
-import net.sf.reasoner4j.fact.Fact;
-import net.sf.reasoner4j.fact.IFact;
-import net.sf.reasoner4j.kb.IKnowledgeBase;
-import net.sf.reasoner4j.kb.MainKnowledgeBaseFactory;
-import net.sf.reasoner4j.motor.IMotor;
-import net.sf.reasoner4j.motor.MotorFactory;
-import net.sf.reasoner4j.rule.AffectConclusion;
-import net.sf.reasoner4j.rule.IPremise;
-import net.sf.reasoner4j.rule.Premise;
-import net.sf.reasoner4j.rule.PremiseAndDefault;
-import net.sf.reasoner4j.rule.Rule;
-
-import org.apache.log4j.Logger;
-
-public class TestCountRetract extends AbstractTestCase {
-
- private static final Logger LOGGER = Logger
- .getLogger(TestCountRetract.class);
-
- public void testCountRetract() {
- final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
- final MotorFactory<String> motorFactory = new MotorFactory<String>();
- final IKnowledgeBase<String> kb = kbFactory.create();
- final IMotor<String> motor = motorFactory.create(kb, this, this);
- motor.addBuiltin(new IncrementBuiltin());
- // first rule
- Rule<String> rule = new Rule<String>();
- IPremise<String> premise = new Premise<String>(
- /* subject */"?X", null,
- /* predicate */null, "state",
- /* object */null, "ko");
- rule.addPremise(premise);
- premise = new PremiseAndDefault<String>(
- /* subject */"?X", null, null,
- /* predicate */null, "koCount", null,
- /* object */"?C", null, "0",
- /* not listening */false);
- rule.addPremise(premise);
- premise = new Premise<String>(
- /* subject */"?C", null,
- /* predicate */null, "increment",
- /* object */"?NC", null);
- rule.addPremise(premise);
-
- // AffectConclusion do not retract conclusion
- AffectConclusion<String> conclusion = new AffectConclusion<String>(
- // ReplaceConclusion<String> conclusion = new ReplaceConclusion<String>(
- /* subject */"?X", null, false,
- /* predicate */null, "koCount", false,
- /* object */"?NC", null, true);
- rule.addConclusion(conclusion);
- motor.addRule(rule);
-
- motor.assertFact(new Fact<String>("myCar", "state", "ko"));
- logKoCount("first ko assert", kb);
- assertNotNull(kb.get("myCar", "koCount", "1"));
-
- motor.retractFact(new Fact<String>("myCar", "state", "ko"));
- logKoCount("ko retract", kb);
-
- motor.assertFact(new Fact<String>("myCar", "state", "ko"));
- logKoCount("second ko assert", kb);
- assertNotNull(kb.get("myCar", "koCount", "2"));
- assertNull(kb.get("myCar", "koCount", "1"));
-
- motor.retractFact(new Fact<String>("myCar", "state", "ko"));
- logKoCount("ko retract", kb);
-
- motor.assertFact(new Fact<String>("myCar", "state", "ko"));
- logKoCount("third ko assert", kb);
- assertNotNull(kb.get("myCar", "koCount", "3"));
- assertNull(kb.get("myCar", "koCount", "2"));
- }
-
- private void logKoCount(final String title, final IKnowledgeBase<String> kb) {
- if (LOGGER.isDebugEnabled()) {
- final Iterator<IFact<String>> iterator = kb.view("myCar",
- "koCount", null).iterator();
- final StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(title);
- stringBuilder.append('\n');
- while (iterator.hasNext()) {
- stringBuilder.append(iterator.next());
- stringBuilder.append('\n');
- }
- LOGGER.debug(stringBuilder.toString());
- }
- }
-
- private class IncrementBuiltin extends AbstractBuiltin<String> {
- public IncrementBuiltin() {
- super(null, "increment", null);
- }
-
- @Override
- public List<IFact<String>> compute(final int ruleIdentifier,
- final String subject, final String predicate,
- final String object) {
- List<IFact<String>> result = new ArrayList<IFact<String>>(1);
- result.add(new Fact<String>(subject, predicate, Integer
- .toString(Integer.parseInt(subject) + 1)));
- return result;
- }
- }
-}
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestExpressionCompute.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestExpressionCompute.java 2011-01-07 17:34:38 UTC (rev 57)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestExpressionCompute.java 2012-03-11 09:50:34 UTC (rev 58)
@@ -168,10 +168,6 @@
assertEquals(expected, sum);
}
- /**
- * DISABLED TEST<br>
- * can not works, not possible to retract list append do by append builtin
- */
public void testListAppendAndPropertySum() {
final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
final MotorFactory<String> motorFactory = new MotorFactory<String>();
@@ -259,7 +255,7 @@
rule = new Rule<String>();
- // ?X value ?V
+ // (?X value ?V) retracted
premise = new PremiseRetract<String>(
/* subject */"?X", null,
/* predicate */null, "value",
@@ -308,7 +304,7 @@
/* predicate */null, "listRest",
/* object */null, "nil");
rule.addPremise(premise);
- // ?LL listAppend ?LR
+ // ?LL listRemove ?LR
premise = new Premise<String>(
/* subject */"?LL", null,
/* predicate */null, "listRemove",
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|