# KEHOME/doc/version.rel
# Jul/5/2003

# date; change
3/6/97; first ke version for Windows 95, BSD/OS UNIX
3/9/97; new filelist implementation; fix bugs
4/14/97; relation separator can be any character (default is ";")
4/22/97; redefine newword; change definitions; add relation error checking
4/24/97; add parameter hmaxlevel; add questions: cname ise**3 ?; uname isa**2 ?
4/25/97; new value concept "hasval"; new knit error checks
4/26/97; hminfactid:=klastid to skip printing of old facts
4/27/97; read file kformat:=rel cname:=relation-name rseparator:=relation-separator
4/29/97; more relation error checks
4/30/97; put knit list in hierarchy; implement action event sequences & chits
5/2/97; fix action/event bugs; change action/event examples
5/3/97; automatic type conversion for do action
5/4/97; implement "isd*" multilevel differentiate; implement "enum" value type
5/6/97; log file; partial user manual
5/7/97; default nvseparator "="; assignment operator "="; context stack of hierarchies: vfind/vpush/vpop - example: english/schank.ku
5/9/97; x is not y  => undo x is y; x,y isa newword
5/12/97; prompt for stdin; automatic installation for Windows 95
5/14/97; revise knowledge: cause/effect, life, marriage; global names for ke parameters & commands
5/16/97; file attributes: file has cname,kformat,nvseparator,rseparator
5/18/97; fix null attribute values; debug output sent to error or log file; new id directory for concept formation files; ku/rel transition; tips for new users
5/23/97; DOS cd,dir command; UNIX pwd,ls command
5/24/97; version 1.2; small tabrasa.ku; automatic declaration of attributes (has attr=value) & actions (do action)
5/26/97; x has attr+=value    (append to comma-separated value list)
5/28/97; x has attr+=value ?? (true or false)
5/29/97; x has attr-=value    (delete from comma-separated value list)
5/30/97; search results "?" and "??" stored in ke parameters "$" and "$$".
5/31/97; complete user manul ke.hlp ke.rtf
6/2/97; first-name, last-name command
6/5/97; new alias semantics x is y,z
6/6/97; name commands: name, nickname, title-name, first-name, middle-name, last-name, suffix-name
6/7/97; no $ variable substitution inside quote
6/14/97; last command result "!" stored in ke parameter "$!"
6/19/97; check loop - finds & prints loops
7/13/97; ke version 1.3: "has" only for attributes; "do" only for actions; "with" for either
7/15/97; change name from r_role to r_form
7/16/97; do action has implicit at phase for KFORMAT=cu 
7/19/97; change knowledge syntax checker name from sc to ksc
7/20/97; add Family History application
7/24/97; ke version 1.4: add "change" operator to characterize event
7/31/97; add indexing package KEHOME/apply/indexing
8/30/97; change "exist" to "existent", "nonexist" to "nonexistent"
9/8/97; version 1.5: commands must begin with "!"; revise newknit.ku; change names
9/11/97; fix bugs: ? do action; x is y with action
9/18/97; part isa characteristic
9/19/97; !vfind question - searches all views in view stack
9/21/97; new implemenation of "changes"
9/22/97; attribute values are stored internally as sets instead of strings
9/22/97; automatic declaration (typing and classification) of attribute, part, action, event
9/23/97; changed relation attribute names back to r_format, r_meaning, r_separator
9/24/97; "causes" is "=>"
9/26/97; new subdirectory KEHOME/fca for examples from Formal Concept Analysis papers
9/28/97; fix semantic,classification bugs re "changes"
9/29/97; KEHOME/logic/proverb.ku - example essay from David Kelley Reasoning Readings
10/1/97; add KEHOME/fca/FCAvsKR.txt - isomorphic context; algebraic variables
11/1/97; at space,time,view statement; fix verb loop (action.icn,chit.icn)
11/2/97; include my AAAI paper "What is Context?" 11/5/97 update
11/6/97; include KEHOME/context/pok.txt "Principles of Knowledge"
11/22/97; ke do classify_dewey
12/9/97; set_param() calls r_init() when KFORMAT=rel
12/12/97; add KEHOME/context/dbgna.ku - database integration example
12/15/97; KE version 1.6: change precedence: blank > comma > semicolon (more English-like phrases & less need for explicit quotes)
12/15/97; KE version 1.6: context must be at beginning of sentence (at space=s,time=t,view=v)
12/19/97; x do kaction sentence   where kaction ::= "know" | "believe" | "say"
12/20/97; kformat=ho for hierarchy outline input, default hseparator="/"
12/22/97; use [] for value lists: name=[value,...]
12/24/97; wildcard  e.g. *logic* is ?
12/25/97; version 2.0
12/27/97; add operator:  "|=" (supports)  "|-" (implies)
12/30/97; !find pattern   ("*" wildcard)
12/31/97; !mymethod arg:1,arg:2,...
1998/1/1; !cc path;  !find pattern,subhierarchy
1998/1/5; !measure cname,attrname; three current concepts:  .  ..  ...
1998/1/6; fix bugs: newword, comma, semicolon, quote, bracket
1998/1/8; !classify newhierarchy,oldhierarchy,attrname
1998/1/10; new syntax: !measure cname with attrname; !classify newcname with attrname to oldcname
1998/1/12; measurement procedures: invocable "measure_attrname"
1998/1/18; KE version 2.1: multiple events per chit, chit indexed by STV
1998/1/23; !find command - only write concept (alias set) once
1998/1/23; !find command - pattern has $=matchlist (in addition to ke has $=matchlist)
1998/1/26; $command, $if, $question, $name variables
1998/1/27; !check event; isastar=ISA; ? isa* class
1998/1/29; NOT a separator: :+-=  \  {} () <> ! ?
1998/1/30; every ... do ... done; when ... do ... done
1998/2/1; forall ... ( ... ); exist ... ( ... )
1998/2/4; automatic continuation for isa,ise, is,has,do,changes, if,then,else, every, ...
1998/2/7; expense records
1998/2/8; new record types: TOKEN, LINETOKEN, SYMBOL, LINESYMBOL
1998/2/9; subject do kaction stm -> at view=ktype_qname stm
1998/2/10; !cc concept sets: $class,$genus,$unit,$alias,$attribute,$attr,$action,$act,$fact
1998/2/10; KE version 2.2: attribute change for relation & method
1998/2/13; allow name=value for all kformat
1998/2/14; allow !command for all kformat
1998/2/15; allow nested control structures
1998/2/17; add KEHOME/homepage
1998/2/17; KE version 2.3: entity in relation/variable
1998/2/21; entity in relation=infon
1998/4/22; product := entity do action aobject with differentia
1998/7/24; KE for Linux available
1999/1/15; KE version 3.0: !menu, wke, wicont
1999/1/20; change "in" to "isin"
1999/1/20; !check link (broken double links)
1999/1/21; !write -- process hfocus value as sorted set instead of list
1999/1/21; relation,method has isastar,separator
1999/1/21; sentence haspart word; word ise newword,keyword; keyword ise separator,operator,quantifier
1999/1/23; add menus for Relation Unit, Execute Method
1999/1/24; process .htm,.html like .ku not .nv
1999/1/25; vers. 3.01: fix critical bug (ksc aborts due to missing systype link)
1999/1/29; v3.02.1: new parameter: removehtml = YES to remove HTML commands
1999/1/30; new parameter: kcase = LOWER to fold names to lower case
1999/1/31; corrected precedence in parsing phrases
1999/1/31; v3.03: reimplement KE using SYMBOL("nv",[name,"=",value])
1999/2/4; v3.1: new output option: hformat=ho
1999/2/8; pphrase: SYMBOL("p",string)
1999/2/8; subject do action aobject = event pplist
1999/2/15; move <!read definitions> from newknit.ku to init.ku
1999/2/15; v3.2: add KEHOME/help/tutorial.txt
1999/3/4; permit "is a","is any","is all","is enum","is req","is seq","is set"
1999/3/7; check.icn: fix unit/concept labels
1999/3/24; new tabula_rasa: existent ise entity,characteristic,relation
1999/3/28; new ke parameters & file parameters
1999/3/28; new output formats: hformat = ku, cu, rel, ho, alpha
1999/3/30; gramatical relationships (keywords)
1999/3/31; v3.3: new syntax: at space=s,time=t,view=v { sentence }
1999/3/31; v3.3: new syntax: person:1 do say to person:2 { sentence }
1999/3/31; v3.3: pronouns are $ variables, e.g.: $she = Mary
1999/4/3; File/Update Relation menu; relation,method has label
1999/4/4; attribute ise current xxx; file has mode,format,...
1999/4/5; balanced () {}
1999/4/11; v3.4: group is all concept
1999/4/17; !begin/!end blocks for relation, hierarchy
1999/4/22; v3.5: new syntax: product := subject do action=event (aobject) pplist
1999/4/29; nocept := I do imagine
1999/5/1; kb/tabrasa.ku, kb/ke.ku
1999/5/1; existence is all existent; identity is all relation
1999/5/2; internet/resource.ku
1999/5/10; v3.6: existent ise entity,characteristic,part,context,sentence; context ise space,time,view; relation is relationship
1999/5/11; group is inclusive mental integration of parts
1999/5/11; redefine concept record -- concept,group has ctype,gtype,ptype,mtype
1999/5/12; eliminate verb: isall, iseither, isenum, ...
1999/5/13; x is group of part with differentia
1999/5/15; attribute=value in menu_attribute()
1999/5/15; existent ise entity,characteristic,part,sentence
1999/5/15; space,time,view isa attribute; space,time,view has ctype=context
1999/5/16; reorganize directories
1999/5/17; ke has space,time,view
1999/5/19; product := subject do act (aobject) pplist => act_123 changes product, aobject
1999/5/20; action declaration: subject do* act; act_123* changes eobject
1999/5/21; disjunctive clause: either sentence or sentence
1999/5/21; conjunctive clause: all sentence and sentence
1999/5/24; new loop detector: isa_loop(uset)
1999/5/25; proposition: at context { sentence }
1999/5/27; infon & format for attribute,action,part
1999/5/30; move [] () {} <> list definitions to symbol.icn
1999/5/30; fix bugs: !isd  tests: expense/summary.ku,family/mother.ku
1999/5/30; fix bugs: $ and dot substitution  tests: expense/summary.ku
1999/6/1; v3.7: concept haspart partname+=partvalue (partvalue is a sequence, attrvalue is a set)
1999/6/2; fix bugs: method [] argument  tests: family/alias.rel,family.lattice.ku,family/tree.ku
1999/6/7; parse question as statement or assignment, then detect "?"
1999/6/7; kperson do kaction=kevent (kobject) pplist (kaction ::= know,believe,...)
1999/6/9; simplified grammar: kusentence,hosentence,relsentence,nvstatement
1999/6/19; revised generator verbs: isa, ism, in
1999/6/19; renamed attributes: isastar -> automatic, hseparator -> hoseparator, rseparator -> relseparator
1999/6/19; method: variable length argument list: format="class:*", meaning="... $* ..."
1999/6/20; !cc infon -- parse infon & set $1,$2,...
1999/6/21; subject ? object -- check ism*,has,do,..., object ? subject
1999/6/23; get_char(),put_char() for chartype: echar,rel,attr,part,act,eobj
1999/6/24; all char values (rel,attr,part,act) are sets
1999/6/24; match_char(),search_char() for chartype: echar,rel,attr,part,act,eobj
1999/6/25; change SYMBOL("rel",rlist) to SYMBOL("rel",rnest) -- parse comma-separated list
1999/6/25; add_statement() -- "addword" option
1999/6/28; search_group()
1999/6/30; meaning = { sentence } for method,relation 
1999/7/2; KEHOME/family: new unique name strategy (alias.rel) & error check (check.htm)
1999/7/4; existent has charname *= charvalue (set intersection)
1999/7/4; product := sentence (sentence instead of statement) -- set $product
1999/7/6; new definition of knit,chit
1999/7/6; !timestamp "message"
1999/7/7; improved printout of actions & events
1999/7/8; revised grammar: subject verbphrase instead of subject verb object
1999/7/11; new commands: dumpkb,loadkb
1999/7/11; new commands: ksize,klevel,kdepth,klist
1999/7/11; ? isa separator
1999/7/12; charvalue can be any type -- most are string,list,set
1999/7/13; charvalue can be any type -- create name for non-string charvalue
1999/7/13; line := unparse(symbol,lsep,psep)
1999/7/13; new record types: EVENT, GROUP
1999/7/15; new symbol type: "pplist"
1999/7/17; new record type: ARGDEF for relation,method argument definitions
1999/7/18; v3.8: 3x faster than v3.7
1999/7/24; count lines,(ku|ho|rel)sentences,(new|ku|ho|rel)statements,commands,assignments,questions
1999/7/25; get_word() -- parse independent of kformat=ku,ho,rel
1999/7/25; $ isa separator (faster dollar variable substitution)
1999/7/27; !dump/ged -- standard GEDCOM format genealogy file
1999/7/29; new record types: PERSON,FAMILY,NOTE
1999/7/31; argdef: argno list -- allows arbitrary numbering of $variables
1999/7/31; meaning=procedure_name -- Icon procedures for methods & relations
1999/Aug/2; . isa separator (faster dot variable substitution)
1999/Aug/3; redefined all the person/family relations: KEHOME/family/*.rel
1999/Aug/4; add Icon meaning procedures: child.icn,marry.icn
1999/Aug/6; v4.0: cache for ke,event,method,relation,person,family,note
1999/Aug/7; add Icon meaning procedure: aka.icn
1999/Aug/8; add procedure: incache(cname,charname)
1999/Aug/11; put_charvalue: store in nvcache & nvtable (for questions & dumps)
1999/Aug/11; add procedure: refresh() (for questions & dumps)
1999/Aug/15; allow for multiple-family adoptions
1999/Aug/17; add procedure: scroll()
1999/Aug/21; writes_any(): don't write bad values (null, zero length, etc.)
2002/Jun/8; v4.1: nocomment.ksh filters out comments ("#" at beginning of line)
2002/Jun/8; v4.1: WinIcon v9.3.2 open/read directories
2002/Jun/12; v4.2: read/write view directory hierarchies (kformat=dir hformat=dir)
2002/Jun/13; v4.1: ke.pif shortcut
2002/Jun/28: v4.1 released -- zip format, with source code
2002/Jul/6; kewin.exe created by WinZip Self-Extractor instead of WISE
2002/Jul/7; exit now control statement, not command
2002/Jul/8; begin-end for method, relation, file
2002/Jul/13; put_char: when charvalue is SYMBOL record, store as string: unparse(charvalue) -- yields much more user friendly search results!
2002/Jul/14; symmetric alias contradiction -- x is not y; y is not x
2002/Aug/6; do write od hfocus to outfile done
2002/Aug/9; do hwalk od concept,action,path done
2002/Aug/10; ! cmd od arglist done -- UNIX sh commands
2002/Aug/11; user-friendly methods: relation.ku,filesystem.ku (in KEHOME/kb)
2002/Aug/12; added '...' quotes; revised semantics for $variables & quotes
2002/Aug/13; v4.2: reorganized smart input menu
2002/Aug/14; v4.2: new recursive commands: read directory, write directory
2002/Aug/14; new commands: ftype,fsize,fstatus, explorer
2002/Sep/2; preposition {proposition list}  e.g.: I do say od {...} done
2002/Sep/2; every generator {proposition list} <<== do ... done only for action
2002/Sep/8; v4.3: use Unicon instead of Icon - mkdir(), rmdir() functions
2002/Sep/9; revised Linux smart menu to match Windows smart menu 
2002/Sep/10; implement fattrib() using Unicon stat()
2002/Sep/12; unset variable (ke attribute)
2002/Sep/12; use ingroup/member for attribute/value,part/partvalue,action/event,relation/infon,event/eobject
2002/Sep/13; upgrade sum command to allow group name in arglist
2002/Sep/14; gname is gtype of utype with automatic,separator -- gtype ::= list,sequence,set,...
2002/Sep/15; improved check_unknown(): try to classify each unknown
2002/Sep/18; do print to outfile od arglist done
2002/Sep/20; v4.4: a la Rand: unit,... isu primitive; primitive isp unit,...
2002/Sep/21; v4.4: p is begin primitive; ...; end primitive p
2002/Sep/21; v4.4: set hformat = hounit; set kformat = hounit
2002/Sep/23; v4.4: rename verbs: ise => isc; new verbs: iss,isg
2002/Sep/26; new_concept(cname,alias,ctype,gtype,utype,ptype)
2002/Sep/30; vdo exec od {proposition list} done
2002/Oct/3; bphrase ::= qphrase bop qphrase; bop ::= and | or
2002/Oct/4; v4.5: set savehref = yes to get URLs from HTML file
2002/Oct/8; v4.5: subject haspart partlist; partlist isapart object
2002/Oct/8; use hwalk path=ISC, path=ISA to display units, primitives
2002/Oct/11; v4.5: m_partphrase(), m_partlist()
2002/Oct/13; add_file(), mkfile() for read_directory(), write_directory()
2002/Oct/27; values of dot variables ., .., ... are $., $.., $...
2002/Oct/27; rename variables: Assignment, Command, If, Product, Question
2002/Nov/2; multiset iss ingroup; bag is multiset
2002/Nov/2; qword ::= (...)
2002/Nov/9; primitive has ctype = primitive (first-level concept)
2002/Nov/9; new parameters: kquote, hquote
2002/Nov/11; "\\n" continues quote to next line (for RDF comment)
2002/Nov/14; change exist,forall to forSome,forAll
2002/Nov/17; new names: unithierarchy, OBJECT
2002/Dec/3; use old partlist syntax; use "Set" for group, "set" for assignment
2002/Dec/22; change KR language to MKR language (McCullough KR or My KR)
2002/Dec/24; mcf2mkr(), kformat=mcf (TAP MCF download file)
2002/Dec/26; map_word(), rdf2mkr()
2002/Dec/28; kformat=rdf (TAP RDF download file), kformat=nt (N-triple)
2002/Dec/28; owl2mkr(), dc2mkr()
2002/Dec/29; simplify low-level parsing: fewer separators, m_assignword()
2002/Dec/30; GetData command using KornShell, Java, TAP Client
2002/Dec/30; mkrGetData command
2002/Dec/31; GetResourcesNamed command
2003/Jan/1; simplify HTML parsing: htmltext, htmlcommand, HTMLstack
2003/Jan/2; rdf2mkr command for TAP RDF files
2003/Jan/4; ExtractData command for Fresno Bee letters to editor
2003/Jan/7; rget (rebol version of GNU "wget" command)
2003/Jan/8; integrate TAP and tabula rasa contexts
2003/Jan/9; person has firstlevel = "true" a la Binswanger,Rand
2003/Jan/9; subject not verb object
2003/Jan/9; set kmapword = YES|NO for translating rdf,etc.
2003/Jan/9; mkrGetResource ? has name = value (revised Jan/15/2003)
2003/Jan/12; v4.6: XML namespace lattice
2003/Jan/13; v4.6: do import od namespace from uri done;
2003/Jan/14; mkrQuestion command
2003/Jan/15; GetResource,PutData,mkrPutData,mkrStatement commands
2003/Jan/16; new downloads: Unx Utilities, rebol 
2003/Jan/17; rmail command (rebol email message)
2003/Jan/20; Windows name changes: ke.exe => ke, etc.
2003/Jan/21; v4.7: semicolon terminates sentence (fewer continuation "problems")
2003/Feb/16; v5.0: KE changed from shareware to open source: GNU GPL
2003/Feb/20; rename meantype to meaningtype; new attribute: formattype
2003/Feb/21; generalized method attribute: format={do mymethod with modifier:1 out product:2 od argument:3 from initial:4 to final:5 done;}
2003/Feb/27; init_xmlns(), kb/xml/*.ku
2003/Mar/1; qname2uriname()
2003/Mar/1; v5.1: change KE program to MKE program (McCullough KE)
2003/Mar/1; v5.1: MKR/MKE glossary
2003/Mar/1; v5.1: KEHOME/kb/xml/*.ku - MKR translation of XML namespace files (includes RDF,RDFS,OWL,DC,RSS,FOAF)
2003/Mar/1; kformat = html|htm|rdf|xml
2003/Mar/3; uget.icn, uput.icn
2003/Mar/3; ke.env,unicon.env,rebol.env,tap.env,opencyc.env,java.env,gcc.env
2003/Mar/4; bselist.icn captures list details for subject,object,value
2003/Mar/6; change syntax from "x is begin group;" to "begin group x;"
2003/Mar/6; map_concept() converts to string if necessary
2003/Mar/7; v5.2: pxp.icn,pxp.env Parlett XML parser
2003/Mar/8; softexe,rmsoftexe -- use soft links to solve Windows .exe problem
2003/Mar/9; PPOBJECT record, vdump,vload,database.icn
2003/Mar/10; parse_file() with TOKEN stream mode
2003/Mar/11; revised group syntax <subject;> for ho,rel
2003/Mar/12; GROUP, HOUNIT, RELUNIT record
2003/Mar/14; NTRIPLE, NVPHRASE record
2003/Mar/15; kb/final.ku, kbcheck,kbwrite, kbload,kbdump
2003/Mar/16; Jcon (java) versions: jke,jksc
2003/Mar/16; turn off attribute CACHE
2003/Mar/18; new commands: systype.env,unicon,jcont,java,zsh,rebol
2003/Mar/18; new group: nt (triple) subject predicate object . ;
2003/Mar/18; new group: mcf name: value;
2003/Mar/27; v5.4: namespace stack
2003/Mar/28; new syntax for true-false questions: if sentence fi;
2003/Mar/31; Netscape Address Book v4.79 (csv2rel, addressbook.def, nab479.mkr)
2003/Mar/31; Netscape Bookmark v4.79 (bookmark.def)
2003/Apr/1; ${variable} a la KornShell
2003/Apr/2; read_tap() when tapformat = mcf|rdf|daml
2003/Apr/2; KEHOME/test: comma.ku,question.ku
2003/Apr/4; revised group grammar: group ::= [gbegin,gslist,gend]
2003/Apr/4; special group statement syntax for hierarchy,relation
2003/Apr/5; Microsoft Address Book v6.0 (addressbook.def)
2003/Apr/10; v5.5: kb/rdfrasa.html, kb/rdfke.html, TABRASA = mkr|rdf
2003/Apr/12; xmlname,xmlns attributes for xmlns qualified names
2003/Apr/15; hierarchy has krtype = mkr|fs|odp|tap|cyc
2003/Apr/15; do mount hierarchy from source to destination done;
2003/Apr/20; do read tap from tap.rdf done;
2003/Apr/20; keopen() works for http,smtp,pop, tcp,udp
2003/Apr/23; begin directory x; ...; end directory x;
2003/Apr/24; UniqueName=rootname for directory group
2003/Apr/25; v5.6: Google search and OWL ontology
2003/May/5; krtype = mkr|tap|opencyc|dmoz|fs, krmode = mkr|rdf|owl|cycl
2003/May/5; do merge od uname,... to cname done;
2003/May/9; RDF integration (basics built-in) and segregation (separate hierarchy for Resource)
2003/May/10; new verbs for OWL: iscomplement,isinverse,isunion,isintersection
2003/May/10; simplify_lattice() in integrate.icn
2003/May/11; oneOf,unionOf,intersectionOf,Restriction
2003/May/14; DefaultQualifer,DefaultUri set by do_xmlns() in xml.icn
2003/May/14; BaseQualifer,BaseUri set by do_xmlns() in xml.icn
2003/May/14; dmoz methods: read dmoz, find topic, find title, find term
2003/May/19; change definition of "primitive": number of units > 0
2003/May/25; v5.7: redefined views: tabula rasa, rdf, rdfs, owl
2003/May/31; ServuStats.com visitor counter
2003/Jun/2; don't record very large sets: x isu Thing
2003/Jun/2; don't record very large sets: x ismem Class
2003/Jun/2; MCF files: ignore Nodes with no properties
2003/Jun/9; test.icn: select_problem()
2003/Jun/9; do random od concept:1,... done;
2003/Jun/9; do read input done;
2003/Jun/10; while sentence { ... };
2003/Jun/22; v5.8: user-defined verbs for binary relations
2003/Jul/5; add Cygwin to KEHOME/bin/*.env files
