Algernon 6.1 15 Feb 2007 - Modified AlgernonProtegeFrameListener to handle frames with embedded spaces in their names. - Added :COUNT-PATHS command similar to :COUNT. - Fixed bug in :DIRECT-INSTANCE that would not return the correct value if it failed when TRACE was :NORMAL or :SILENT. - Added :SEARCH-ALL to do a global search of the KB. - Requires adding "apis/search/search-api.jar" to the classpath in the protege.lax file. - Added result count in the title area of the result table in the AlgernonTab. - Adding :SEARCH - Updated documentation for new :SEARCH and :SEARCH-ALL commands. Algernon 6.0 23 Jan 2005 - Recompiled with Protege 3.0 beta, Build 124 - Algernon rules now recognize and respond to changes made in the Protege GUI. If you change the value of a slot via the Protege GUI, any relevant Algernon forward-chaining rules will fire. - Modified Processor.activateClosures() to accept a null kbSet argument. If it is null, it uses the result of algernon.getKbSet() as its KBSet. - Added CollectionUtil.last() method. - Added some get/set methods to AlgernonCompiler. - Modified AlgernonProtegeKb.convertToAlgernon to return a String in the default case rather than returning the input object. The non-Algernon object causes errors later in processing. Bug reported by mfeblowitz. Algernon 5.0.1 03 Jan 2005 - Linked in correct version of Jatha (2.4.0). - Updated version to 5.0.1 for release. Algernon 5.0 02 Jan 2005 - Fixed bug in documentation of :LIMIT. - Fixed error in Processor.tryToInstantiate(). IF condition had an extra clause and thus rule failures were handled incorrectly unless :VERBOSE tracing was turned on. (Thanks for the detailed error report from Alan Lockett.) - The String.concatenate() function changed in the last version of Jatha, but the Algernon code was not updated to reflect this. Also, there was a problem passing the first argument to the concatenate function. I fixed this in Jatha and fixed the 5 calls to concatenate in the Algernon code. - Due to the above fixes, Backward chaining rules now work again in Algernon. Algernon 4.9 10 Aug 2004 - Fixed a problem with reloading rules inside the AlgernonTab in Protege. The loaded rules weren't being compiled and thus weren't executing. - Updated the LISP backend to Jatha 2.1, which includes new functions for String processing, including: string string-upcase string-downcase string-capitalize nstring-upcase nstring-downcase nstring-capitalize string-equal string= string/= string< string-lessp string> string-greaterp string<= string>= string-not-lessp string-not-greaterp string-ends-with string-starts-with string-trim string-left-trim string-right-trim position - Fixed class loading utility routines used in JavaAPIKB. From Java 1.4.2_04 to 1.4.2_05, Java is now enforcing the restriction that path names should be '.' separated and '/' characters are not allowed. - Fixed a problem in the class loader where the file URL to a jar file contained escaped characters (such as spaces). The jar file name is now decoded using URLDecoder before being passed to the file system. - Fixed problem where the counted variable in :COUNT was incorrectly assumed to be globally accessible by the compiler. Algernon 4.8 26 Jul 2004 - The output table on in the Algernon Protege tab was editable in Java 1.4.2. I made it uneditable. The user can click once on a frame name in the output table in order to display the frame using Protege's display API. - Fixed problem where variables used in part of :ADD-INSTANCE were not substituted by their bound values. Also fixed the same problem in :ADD-CLASS. - Fixed a problem with scanning for unbound variables in :OR statements. Algernon was not finding unbound variables. - Updated Jatha library to Jatha 2.0. - Compiled with Protege 2.1.1 build 239. Algernon 4.7 24 Jun 2004 - Recompiled with Jatha 1.9 and Protege 2.1.1 build 239. Jatha 1.8 and previous versions contained an error in the floating-point divide routine. Algernon 4.6 7 Jun 2004 - Recompiled with Jatha 1.8.0 and Protege 2.1 build 232. - Made trace statements conditional so they don't create the output string for the trace if the trace message will not be printed. This makes Algernon run faster and eliminates the possibility of some stack overflows. Algernon 4.5 28 May 2004 - Fixed a rare NullPointerException in the Algernon Compiler. - Recompiled with Protege 2.1 beta. - Created a Protege plugin in the new directory structure preferred by Protege 2.1. Algernon 4.4 07 May 2004 - Fixed a problem in the Algernon compiler where it would sometimes not correctly handle a frame with a space in its name. Algernon 4.3 02 May 2004 - Fixed a problem in Processor.activateClosures that was caused by copying code in during the v4.2 fixes and not changing the variable name used in the code. - Catch a Protege exception when trying to create an instance with the same name as another frame. Now the code tacks on a numeric suffix to the name and tries to create it with that name. Suffixes start at "-2" and increase until an acceptable name is found. Algernon 4.2 30 April 2004 - Fixed a problem with in ActivateBCRules where it would incorrectly say that a string type slot name was not a valid name of a slot. - Changed an ERROR message in Algernon.isInstance to a WARNING. It now optionally prints if the debug level is high enough, rather than printing all the time. Algernon 4.1 13 Feb 2004 - Compiled with Protege 2.0 final, build 160. - Promoted a couple of new forms of the lookupInstance method up to the AlgernonKB interface. - Altered the DirectInstance opcode to use a new version of lookupInstance. - Fixed the lookupInstance method in HibernateKB to use the correct HQL form. - Implemented hasDirectInstance and hasInstance in JavaAPIClass. - AlgernonCompiler: added more trace messages, added an API call to turn low-level trace messages on/off, fixed a possible null pointer exception in the type binding methods. - Added an option to the :TRACE command to turn compiler tracing on/off. Use (:TRACE :DEBUG-COMPILER-ON) and (:TRACE :DEBUG-COMPILER-OFF). - Modified :INSTANCE, :DIRECT-INSTANCE and :CHILD to accept the form: (command class instance variable) so that you can verify a relationship and assign the instance to a variable if the relationship is true. For example: (:DIRECT-INSTANCE Dogs Rover ?rover). - Fixed JavaAPIRelation.getArgumentTypes() when dealing with Java methods as slots. - Removed an extraneous constructor in AlgernonTab used only for debugging that used a deprecated and recently-removed constructor deep inside Protege's Tab classes. - Recompiled with latest Protege. Previous versions of Algernon 4.0 beta appear to have been compiled with both the Protege 2.0beta and Protege 1.9beta jar files on the classpath, leading to clean compiles but anomalous behavior at runtime. - Hack to AlgernonProtegeFrame.getName() to get around Protege 2.0 "feature" of returning "slot not set" for the name of frames without browser text. Ray F. says he will fix this in Protege 2.1. - In AlgernonCompiler.implicitTypeRestrict, use the method toStringSimple in both arguments of the call to generalIsa, not just in the first argument. Not sure why this worked before. - Fixed a couple of Protege calls that are now deprecated in Protege 2.0. - Added the mini-Mycin example to the example/ directory in the source tree. This was contributed by Mor Peleg. Algernon 3.7.6, 4.0.2beta 25 Dec 2003 - Examples - new top-level examples directory. Currently has the historical "flu" example from Algernon. I split it into two versions, flu1.txt and flu2.txt, which illustrate two different methods of implementing the example. - AlgernonProtegeKB: - In constructor, it now creates a new, empty KB if you send in null for the kbName (String) argument. - In query, store and verify, it now returns FAILURE if you try to store a negated clause. It used to return null which caused an AlgernonDataException to be thrown. - Processor: Added more trace messages. - AlgernonCompiler: - Fixed compilation of the ALL-PATHS command when compiled in a rule. - Changed branch to SUCCEED to correctly branch to FAIL in ALL-PATHS. - Added more trace messages. - Changed rule compiler to correctly copy in existing binding lists. - Opcodes: - Ask: Changed format of questions asked. - Branch: New trace messages to display activations. - ConjunctiveBranch: New trace messages to display activations - Query: Modified trace message to display the number of results. - Select: New trace message to print ID of activation selected. - ShowCode: Print binding list of code version. - Subroutine: New trace messages. - Trace: Added a new :STEP mode to aid in debugging. Use (:TRACE :STEP) to enter step mode and (:TRACE :RUN) to exist step mode. - Activation: Store pointer to Algernon and give each activation a unique ID. - BindingSet: Fixed unify() so that it looks up frames if given a symbol or string. - AlgernonProtegeFrame: Modified getPossibleValues to handle non-frame values. - Web site: - Improved explanation of :ALL-PATHS. - Updated documentation for :TRACE to include the new :STEP command. - Updated Jatha library to v1.5.6. Algernon 4.0.0beta 16 Dec 2003 - (mh) Recompiled with Protege 2.0 beta. Use 4.x version with Protege 2.0. - (mh) Minor change in the error message printed when an input file can't be found. Algernon 3.7.4 15 Dec 2003 - Removed lines erroneously inserted into AlgernonProtegeKB.isSimpleType. Algernon 3.7.2 12 Dec 2003 !!! ----- WARNING: NON-BACKWARD-COMPATIBLE CHANGE ------------ !!! - Changed method name of getOwnSlotValues on the interface AlgernonFrame getOwnRelationValues to match Algernon's preference for 'relation' over 'slot'. !!! ----- end of non-backward-compatible changes ------------ !!! - Deactivated debug messages accidentally left activated in AlgernonCompiler.java - The SELECT opcode prints the value of the activation register if the trace level is DETAIL or higher. However, it was converting the activation list to a String whether or not it printed it. This caused a StackOverflowError when the activation list was large. Now it only turns the value to a string if it is going to print it. A list length larger than 3000 will cause a stack overflow. - Removed some extra trace statements inadvertently left in. - Enhanced AlgernonProtegeKB.convertToAlgernon to be able to convert Long values, which had been inadvertently left out. - Added the utility class org.algernon.util.ReflectionUtil containing static methods for dealing with classes and methods. - Renamed some methods on CollectionUtil that had been inadvertently capitalized. - In Algernon.relationIsFull, don't retrieve the relation values unless the relation has a limited maximum cardinality. - Added code to AlgernonCompiler.typeEQ to accept types that are a descendant of the type being requested. Not sure why this wasn't in there years ago. - Fixed problem in the compiler when compiling backward-chaining rules. It now uses the correct classes of the arguments in the clauses. - First release of a KB backend that accesses data via a Java API. org.pharmgen.kb.api.JavaAPIKB, JavaAPIClass, JavaAPIInstance, etc. - Rewrote org.pharmgen.kb.agent.google.GoogleKB to use JavaAPIKB. - Rewrote org.pharmgen.kg.agent.hibernate.HibernateKB to use JavaAPIKB. Algernon 3.7 4 Nov 2003 - Algernon now supports the CLASS type for slots in Protege. It also supports :ANY and :INSTANCE, although :INSTANCE is hidden - when a relation is created with a range that is a class in the KB, the slot is created with the type of (:INSTANCE, class). To use the CLASS type, specify 'class' (without the quotes) as the range of a slot. If you use :CLASS, Algernon gets confused because that is the name of a System class in Protege. - Initial beta release of Java2Protege, an application that converts a Java API to a Protege ontology. - Released Algernon on SourceForge as Algernon-J. Algernon 3.6.6 24 Oct 2003 - Fixed erroneous CardinalityException in AlgernonProtegeKB. Should have been a generic StorageException. - Made variables non-static in Algernon that were accidentally left out of the changes in v3.6.3. Algernon 3.6.5 08 Oct 2003 - Final fixes to handle Value Types correctly. - Fixed condition where a DisplayName could get added to the DisplayName slot more than once. - Fixed incorrect call to set the range of a relation. setTemplateFacetValue -> setTemplateFacetValues. Algernon 3.6.4 06 Oct 2003 - Minor fix to initialize a variable correctly in the Algernon tab. Algernon 3.6.3 03 Oct 2003 - Major restructuring so that each AlgernonFrame knows which instance of Algernon it belongs to. This facilitates running multiple Algernons at the same time in the same memory space. - Major changes due to changes in the Jatha LISP subsystem similar to the changes described above. - Fixed a few minor bugs found during testing after the major changes above. Algernon 3.6.2 29 Sep 2003 - Modified behavior of :COUNT to conform to the documentation. It no longer branches and it always succeeds, binding the result variable to zero if there are no values. - Added :FOR command. Similar to :COUNT except that it kind of iterates over the values. Always succeeds. Creates N branches, one for each value (may be zero). Algernon 3.6.1 24 Sep 2003 - Added :TEMPLATE-RELATION as a user-level command to retrieve template slots of classes, or to verify that a slot is a template slot of a class. - Internal restructuring of command datatypes so that the compiler code is cleaner. - Activated type restriction code in Algernon Compiler. A clause such as (:INSTANCE ?variable) will cause the type of ?variable to become if it is legal to do so (the new class must be a subclass of the original type of ?variable). This works for the Algernon commands :INSTANCE and :CLASS, as well as the Protege slots :DIRECT-SUPERCLASSES and :DIRECT-CLASS. Usually you will want to use :INSTANCE. Algernon 3.6.0 12 Sep 2003 - Fixed compiler bug that caused it to reject some legal slot value assignments. - Added getTemplateRelations() to AlgernonClass. - Compiled with J2SE 1.4.1_01-69.1 on Mac OS X 10.2.6 Updated to Protege 1.9 (build 1120) Algernon 3.5.6 24 Jul 2003 - :ADD-RELATION in the Protege backend now allows slots to be overridden on different classes, i.e. to reuse a slot name with a different signature (domain and range). Algernon 3.5.5 21 Jul 2003 - Extended the :ADD-RELATION command to be able to specify :MIN-CARDINALITY, :MAX-CARDINALITY, :DEFAULT and :INVERSE. Algernon 3.5.4 16 Jul 2003 - Fixed off-by-one errors which sometimes caused the wrong rule continuation to be instantiated or checked at runtime. - Fixed problem where rules would unnecessarily be recompiled at runtime. - Fixed problem where multiple Algernon menus would appear in the Protege Algernon Tab when multiple tabs are configured. - Fixed problem with activating backward chaining rules that broke while fixing activation of forward chaining rules. - Added optional :INCLUSIVE argument to :CHILD, :CLASS, :DIRECT-CLASS, :DIRECT-INSTANCE, :DIRECT-SUBCLASS, :DIRECT-SUPERCLASS, :INSTANCE, :LEAF-CLASS, :PARENT, :ROOT-CLASS, :SUBCLASS, and :SUPERCLASS. Algernon 3.5.3 10 Jul 2003 - Fixed problem where rule continuations would fire when they shouldn't. The bindings stored with the continuation were not being applied to the key clause before the key was unified with the relation that activated the rule. (Reported by Joe V) Algernon 3.5.2 07 Jul 2003 - Removed one last remaining static initializer in the rule compilation code that was causing a problem in recognizing rules properly when Algernon was instantiated twice. (Reported by Joe V and Aaron V) Algernon 3.5.1 05 Jul 2003 - Fixed pervasive error where structure-traversing commands like :CHILD and :DIRECT-INSTANCE would succeed when they should actually fail. - Removed extraneous debug message about the RULE Register. (Reported by Joe V) Algernon 3.5.0 02 Jul 2003 - Fixed error in compiling the :DELETE command. It wasn't creating a Clause instance from the clause. - Assertions no longer generate a visible exception when the assertion would have exceeded the maximum cardinality of a slot. The assertion now correctly fails and generates a trace message if :VERBOSE trace mode or higher is enabled. - Slight enhancement to trace messages for ASSERT and QUERY. (Reported by Aaron VonderHaar.) Algernon 3.4.9 30 Jun 2003 - Removed extraneous debug message during compilation. - Fixed slot lookup (again). Wasn't working in some cases where the slot type wasn't known ahead of time. - Improved error message when an error occurs when calling out to the LISP subsystem. - Reported by Steven Wartik. Algernon 3.4.8 19 Jun 2003 - Fixed type inferencing when value type is Instance and slot is redefined in a different class. Implementation was incomplete after v3.4.7 changes. - Thanks to Steven Wartik for providing a detailed error report. Algernon 3.4.7 10 Jun 2003 - Modified AlgernonCompiler to do type inference when a variable is introduced in a :CHILD, :DIRECT-INSTANCE, :DIRECT-SUBCLASS, :INSTANCE, :LEAF-CLASS, or :SUBCLASS command. - Modified slot type lookup to look up slot types at the class, if that information is available. Protege allows slot value types to be overridden in different classes, so the Protege backend needs to look up the type specifically for that class, not for the slot in general. - Fixed external Java evaluator to correctly recognize Boolean false values other than Boolean.FALSE. - Thanks to Cindy Moncsko at SAS for pointing these problems out. Algernon 3.4.1 23 May 2003 - Modified AlgernonProtegeFrame.getName() to call getBrowserText(). - Fixed behavior of :CHILD and :PARENT commands to match the documentation. Algernon 3.4.0 16 May 2003 - Added code to prevent Algernon from printing output when (:TRACE :SILENT) is set. Also added a "-s" command line argument to set silent mode from the command line. - Fixed call of load() to pass in current trace level instead of :NORMAL. Algernon 3.3.9 23 April 2003 - Finished implementing the :ALL-PATHS command. - Fixed bug in compiler that only showed up when executing the :ALL-PATHS command. - Fixed handling of results from nested subroutines, such as in (:FAIL (:ALL-PATHS ...)). - Used setValueChecking/getValueChecking in Protege KB backend. Algernon now requires Protege 1.8 final when using the Protege backend (which is currently the only available KB backend). Algernon 3.3.8 15 April 2003 - Added Algernon.getBinding() and Algernon.getAlgernonBinding() for users who want to parse the Result returned by Algernon. - Implemented opcodes ConjunctiveClear and ConjunctiveBranch which are used in ALL-PATHS. - Fixed bug in Clause.getVariableArguments that was causing the compiler to sometimes incorrectly compile wrapped clauses (e.g. (:FAIL clause) and (:NO-CONTINUATION clause)) in query mode rather than assert mode. - Fixed bug in the SUBSTITUTE opcode which caused a ClassCastException if there was no binding list on the stack. This was preventing some :TAXONOMY statements from executing. - Changed JavaEvaluator so that it converts arguments to Java objects before looking up the method name and passing the arguments to the method. Previously the arguments were instances of LispValue. This affects (:BIND ?x (:JAVA ...)) and (:EVAL (:JAVA ...)). THIS MODIFICATION IS NOT BACKWARD-COMPATIBLE. - Fixed errors when compiling and running the :ANY command. - Clarified compiler messages and HTML documentation for :NO-CONTINUATION. :NO-CONTINUATION takes one and only one argument. Algernon 3.3.5 07 April 2003 - Trapped an exception in the :FAIL opcode that was generated by a user input syntax error. - Added Algernon Tab menu item to Clear Query History. - Fixed bug in compiling :NO-CONTINUATION clause. - Added trace messages to better explain why backward chaining rules didn't fire. - Fixed bug in Query History. It wasn't correctly clearing the query history when :CLEAR-RELATION was called. Algernon 3.3.3 03 April 2003 - Set the name of the Algernon tab during initialization so it can be accessed via protegeView.getTab("Algernon"). - Added a getAlgernon() method to AlgernonTab. - Updated documentation. - Fixed bug related to storing values in slots whose name starts with a colon. - Implemented the :FIRE command, which allows the user to fire forward-chaining rules as if a clause had been asserted. Useful if there is already data in the KB that should have fired one or more rules. Algernon 3.3.0 02 April 2003 - Fixed a problem with verify not working on String values. - released as v3.3.0, first non-beta version Algernon 3.2.9 (beta) 18 March 2003 02 Apr 2003 (mh) - Initial version of AlgernonServer, using code contributed by Emilio Remolina. The AlgernonTab has a "Server..." menu item. Once the server is started, a client can contact it and send Algernon commands (paths) to be executed by the Algernon.tell() method. The ask() method is not supported at this time. 01 Apr 2003 (mh) - Finalized support for loading rules from frames. The frames must be instances of a class specified by the user. There can be multiple sets of frames in the KB at the same time. 25 Mar 2003 (mh) - Added Algernon tab command to load rules from the KB. Rules are found as instances of a frame called :ALGERNON-RULE. In the future, alternative locations will be supported. 17 Mar 2003 (mh) - Added support for Protege "Cls"-type slots, which had been inadvertently left out. - Added some more user-level debugging statements (see the :TRACE command). - Debug level is now set correctly when the trace level is set inside a rule. 07 Mar 2003 (mh) - Finished a major retooling of the Protege tab display. - Added keyboard shortcuts for common commands. - Added an Algernon menu in the Protege menu bar. 05 Mar 2003 (mh) - Can now click on frames in the Algernon results table to display the frame. 04 Mar 2003 (mh) - Redesigned the Protege tab GUI. 03 Mar 2003 (mh) - Fixed problem where adding a new tab in Protege re-initializes Algernon and everything stops working. Reworked static vars in AlgernonCompiler and changed the way that Algernon calls LispParser. Algernon 3.2.8 (beta) 25 February 2003 25 Feb 2003 (mh) - Further modifications to Protege plugin interface. Added input and output history and got rid of the "variables to display" window, which nobody seems to use. 24 Feb 2003 (mh) - Changed AlgernonProtegeKB to check cardinality of slots before storing data in them. - Modified Protege tab to display output in a table. 21 Feb 2003 (mh) - Added CLEAR and LOAD buttons to Algernon Protege tab. - Adjusted font size and color of labels on the tab page. 20 Feb 2003 (mh) - Adjusted output format when results are printed. Indent was off by one on first line. - Removed unneeded classes in the Google backend. Now only has GoogleKB. Algernon 3.2.7 (beta) 19 February 2003 19 Feb 2003 (mh) - Fixed bug in :NAME. (:NAME ?x "foo") now correctly retrieves all frames with the name "foo". - Added code to Processor.process() so that it reports runtime errors in the ErrorSet passed in, and so that it correctly reports FAILURE if the number of errors is > 0. - Modified the Protege plugin so that it correctly reports runtime errors in the output window. Algernon 3.2.6 (beta) 18 February 2003 18 Feb 2003 (mh) - Compiler, when called on-the-fly to compile a rule, would eat the code if the rule had a warning or error in it. Modified the compiler to print the error(s) and allow the rule to execute. - Protege backend now correctly supports :BOOLEAN, :FLOAT, :INTEGER, :SYMBOL and :STRING types. Use :TRUE and :FALSE for boolean values when using the :BOOLEAN type. - Added more test cases, for rules and slot definitions. Algernon 3.2.5 (beta) 12 February 2003 11 Feb 2003 (mh) - Made compiler smarter about assigning types in special forms like :ADD-CLASS and :ADD-INSTANCE. - Changed Protege backend to send in null for the new frame name when the user specified NIL. NIL didn't work for some reason. - Compiler now knows that the new frame variable is bound in the tail of an :ADD-CLASS or :ADD-INSTANCE form. 10 Feb 2003 (mh) - Increased size of input window in Protege plugin. - Added deployment and jar creation scripts. - Incremented version number to 3.2.5. - Fixed problem in assertion where the system was too aggressive about turning strings and symbols into frames. Algernon 3.2.4 (beta) 10 February 2003 09 Feb 2003 (mh) - Eradicated a bug in returning results that showed up when executing the form (:FAIL (:TEST ...)). 08 Feb 2003 (mh) - Fixed a couple of places in the Algernon compiler where it was losing code that was passed into a specialty compilation method. - Simplified MiscellanyTest test program. - Added trace messages to Create and Delete opcodes that previously didn't print anything when VERBOSE trace mode was turned on. - Fixed case where Test-Succeed was erronously removing a result set. - The Return opcode now uses Processor.SUCCESS instead of LispValue.T. - TestSucceed now correctly handles some obscure return cases. - Fixed ADD-CLASS, ADD-INSTANCE, FORC-CLASS, FORC-INSTANCE, THE-CLASS, THE-INSTANCE which were not correctly compiling the optional path at the end of the clause. - Changed Protege backend so that it doesn't rename a frame if the new name is the same as the old name. Protege 1.8 build 1026 incorrectly thinks that this causes a duplicate name conflict and changes the name of the frame. - :OR opcode is now implemented. - Added check in CreateRules for a non-existent class. - Added part of Tutorial #3. Algernon 3.2.3 (beta) 05 February 2003 05 Feb 2003 (mh) - Fixed type checking in the compiler. - Fixed DELETE operations to have them place a result in the RESULTS register. - Modified the way that Relations return the parameter types they expect. Now supports multiple domains and ranges. Algernon 3.2.2 (beta) 04 February 2003 04 Feb 2003 (mh) - Changed look of Protege tab plugin. No functional change. - Results now correctly show when an operation failed. - Note: type checking does not work correctly in the Algernon compiler in this version. Algernon 3.2.1beta 03 February 2003 03 Feb 2003 (mh) - Fixed case where Algernon was stripping the leading ':' from Protege slot names when looking up frames and relations by name. - Fixed :DIRECT-CLASS to correctly get the immediate superclass rather than acting the same as :CLASS. - Fixed test case in SpecialTest testing program. Algernon 3.2.0beta 03 February 2003 03 Feb 2003 (mh) - Released 3.2.0beta. 02 Feb 2003 (mh) - Tweaked results output format. - Protege tab: Added list of variables to print. - Modified Protege tab to have separate Ask and Tell buttons. - Fixed assertions when value is not a frame. 01 Feb 2003 (mh) - Added :USE-KB command to load KBs at runtime. - Finished rudimentary Protege plugin. 31 Jan 2003 (mh) - Added web site and documentation to the CVS archive. - Moved Protege plugin to org.algernon.kb.okbc.protege.plugins - Added org.algernon.Algernon.main() method for running Algernon from the command line. 28 Jan 2003 (mh) - Implemented :LEAST-COMMON-SUPERCLASS macro. - Implemented :BRANCH macro. 22 Jan 2003 (mh) - Implemented :LIMIT macro. - Implemented :COUNT macro. - Modified compilation of :BIND so that it doesn't substitute bindings for the variable to be bound. This lets the programmer rebind a variable that has already been bound before. - Added new :SUBSTITUTE1 internal opcode to be used with :BIND. 21 Jan 2003 (mh) - Revised frame/relation lookup. Now, when a clause is presented the relation is found in the KBSet and the frame and value are found in the KB of the relation. This facilitates using multiple KBs at the same time. Went through all opcodes and fixed all calls. - Finished :ASK implementation. - Added AlgernonFrame.getPossibleRelationValues(AlgernonRelation) and implemented it in the AlgernonProtegeFrame class. - Fixed error-handling in various places. 16 Jan 2003 (mh) - Implemented :DATE 15 Jan 2003 (mh) - Implemented :TAXONOMY. - Implemented AlgernonProtegeKB.createClass. - Bug fixes in BindingSet management, eliminating spurious reasoning branches. 13 Jan 2003 (mh) - Fixed bug in Protege backend that was allowing duplicate slot values. - Added :PRINTLN command. 09 Jan 2003 (mh) - Added new commands Child and Parent, and method LeastCommonSuperclass. - Added :TRACE command. 08 Jan 2003 (mh) - Added Class, Subclass, Superclass, Instance, DirectSubclass, DirectSuperclass, LeafClass, RootClass, DirectInstance commands. - Verified all test programs. 03 Jan 2003 (mh) - Added isClass, isFacet, isInstance, etc. methods. File created 01 January 2003