My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
ForthMindTextFile  
AI for loading into Win32Forth or 64-bit iForth
Featured
Updated Aug 18, 2011 by menti...@gmail.com

MindForth

( 18aug11A.F -- modification of 17augl1A.F MindForth )
( Released under GNU General Public License V2 )
( http://gpl-violations.org -- see NYT Sun.26.SEP.2010. )
( May be ported to new language and app store marketed. )
( May be named "Mind.F" or any "Filename.F" you choose. )
( Rename any Mind.F.txt as simply Mind.F for Win32Forth. )
( http://www.winzip.com/aboutzip.htm tells about WinZip. )
( Download and unzip W32FOR42_671.zip to run MindForth. )
( Run the AI with Win32Forth by issuing three commands: )
( win32for.exe [ENTER] )
( fload Mind.f [ENTER] )
( MainLoop [ENTER]. )
( To halt the AI Mind, press the ESCAPE key at any time. )
( Ask or answer questions about MindForth AI on Usenet. )
( http://groups.google.com/group/comp.lang.forth/topics )
( http://www.scn.org/~mentifex/mindforth.txt Win32Forth )
( http://www.scn.org/~mentifex/mind.frt 32/64-bit iForth )
( http://code.google.com/p/mindforth/wiki/UserManual )
( http://code.google.com/p/mindforth/wiki/ChangeLog data )
\  7nov10A.F psi-damps be-verbs to reduce stray activation.
\  9nov10A.F is 7nov10A.F with diagnostics commented out.
\ 25feb11A.F removes obsolete query-flags and query code.
\ 15apr11A.F improves WHO-query and WHAT-query responses.
\ 25apr11A.F sets zero act(ivation) for ReEntry concepts.
\  3may11A.F coordinates InStantiate and ReActivate "WHO".
\  7may11A.F inhibits transitive verbs after thinking them.
\  8may11A.F improves VerbPhrase use of inflectional "S".
\ 16may11A.F uses differential instead of linear PsiDecay.
\ 26may11A.F assumes plural number if noun ends in "S".
\ 29may11A.F answers questions from knowledge base (KB).
\  1jun11A.F was abandoned after code veered into disarray.
\  6jun11A.F gives valid answers to knowledge base queries.
\ 12jun11A.F introduces WhatAuxSVerb to ask user questions.
\ 19jun11A.F calls WhatBe if no verb is found for a subject.
\ 23jun11A.F has AskUser begin asking yes-or-no questions.
\ 24jun11A.F converts KbTraversal concepts to query-subjects.
\ 25jun11A.F in VerbPhrase eliminates need for NegSvo module.
\ 25jun11B.F organizes AuxVerb module for use with negation.
\  2jul11A.F introduces KbRetro to adjust the knowledge base.
\ 19jul11A.F uses recnum to recognize CHESS as singular noun.
\ 20jul11A.F removes obsolete NegSvo in favor of VerbPhrase.
\ 21jul11A.F uses diagnostic messages to debug negation code.
\ 21jul11B.F uses prejux to carry NOT over onto verb engram.
\ 27jul11A.F introduces "aftjux" for negation of be-verbs.
\ 28jul11A.F introduces "tsels" for inhibition of subjects.
\ 29jul11A.F adjusts activations for negation of be-verbs.
\ 30jul11A.F streamlines the EnCog English cognition module.
\  2aug11A.F troubleshoots EnBoot with diagnostic messages.
\  2aug11B.F instantiates AM, IS, & ARE as psi "58=BE" verbs.
\  4aug11A.F debugs spurious-predicate-nominative problem.
\  4aug11B.F puts cumulative SpreadAct spikes only on verbs.
\  5aug11A.F in VerbPhrase removes redundant NOT negation.
\  5aug11B.F adjusts activation-levels for direct objects.
\  6aug11A.F assigns number for both input and re-entry.
\  6aug11B.F improves the function of the AskUser module.
\  7aug11A.F repatriates BeVerb into the VerbPhrase module.
\  8aug11A.F disregards Psi number during EnReify transfer.
\ 10aug11A.F is before removal of diagnostic messages.
\ 10aug11B.F in VerbAct converts "AM IS ARE" to "58=BE".
\ 11aug11A.F uses new variables "notjux" and "skipseq".
\ 12aug11A.F uses diagnostic messages for radical change.
\ 12aug11B.F shifts NLP generation from en{ to psi{ array.
\ 13aug11A.F prepares for English or German irregular verbs.
\ 14aug11A.F psi-damps 58=BE after thinking AM or IS or ARE.
\ 15aug11A.F improves threshold-test branching in VerbPhrase.
\ 16aug11A.F defaults to self-concept I if no noun is active.
\ 16aug11B.F has two-step be-verb substitution in VerbPhrase.
\ 17aug11A.F eliminates activation on non-selected concepts.
\ 18aug11A.F clears stray activation on nouns with NounClear.
DECIMAL  ( use decimal numbers )
variable act 0 act ! ( activation level  )
variable actbase ( AudRecog discrimination activation base)
variable actran  ( PsiDecay holder of act-levels; 16may2011 )
variable adverbact 0 adverbact ! ( 29aug2008 adverb test )
variable aftjux  ( after-jux for negation of verb of being )
variable alsoran  ( NounPhrase non-winner to be psi-damped )
variable anset  ( Before vowel set article AN insertion )
variable areflag ( 10dec2009 SelfRef answers "what are?" )
variable atcd  ( 30dec2009 "antecedent" for EnPronoun )
variable aud  ( auditory recall-tag for activating engrams)
variable audjuste ( NounPhrase motjuste aud to SpeechAct )
variable audme  ( tag to find "ME" in auditory memory )
variable audpsi  ( de-globalizing the "psi" variable )
variable audrec  ( 6may2009 replacing "psi" in AudRecog )
variable audrun 1 audrun ! ( counter of loops through AudRecog )
variable audstop  ( flag to stop SpeechAct after one word )
variable bday ( day of birth reveals oldest living AI Mind)
variable beact  ( for discrimination during BeVerb; 8aug2010 )
variable beflag 0 beflag ! ( 23apr2009 for InStantiate )
variable beg  1 beg ! ( "beginning" flag for word engrams )
variable bhour ( hour of birth for user interface display )
variable bias 5 bias ! ( Parser; newConcept: expected POS )
variable bminute ( minute of birth: user interface display)
variable bmonth ( month of birth: user interface display )
variable bsec ( second of birth: user interface display) 
variable byear ( MainLoop; TuringTest HCI -- year of birth)
variable caller  ( debug-identifier of calling module )
variable cns  1024 cns !  ( "central nervous system" size )
variable coda  128 coda !  ( memory recycled in ReJuvenate)
variable cogpsi  ( cognition psi source-node in SpreadAct )
variable conj  ( OldConcept; ConJoin: conjunction )
variable ctu ( continuation-flag for "Aud" array phonemes )
variable defartcon ( set definite article condition )
variable detour  ( abort-flag if knowledge is insufficient)
variable dirobj  ( indicates seeking for a direct object )
\ variable doesflag ( 13dec2009 SelfRef answers "What does? )
\ variable doflag  ( 13dec2009 SelfRef answers "What do...? )
variable dopsi  ( direct-object-psi to calculate "thotnum")
variable dunno  ( 13dec2009 Flag for EnCog to call SelfRef )
variable dunnoobject ( 5jan2010 EnCog what-do-X-verb flag )
variable dunnoverb   ( 5jan2010 EnCog what-do-X-do flag )
variable edge  0 edge ! ( Rejuvenate: edge-of-thought flag)
variable en7 ( EnVocab recall-vector "aud" in Rejuvenate )
variable enx ( holds concept-number in transfer to English)
variable eot ( end-of-text for use in AudInput ) 
variable fex ( holds fiber-out concept up from Psi memory )
variable fin ( holds fiber-in concept for Psi array access)
variable fyi 0 fyi ! ( rotates through display modalities )
variable ghost 0 ghost ! ( to switch from "a" to "the" )
variable glot 1 glot ! ( flag for which language to think in )
variable greet 420 greet ! ( greeting-trigger; 8oct2010 )
variable guspsi  ( concept-tag attached to taste-memories )
variable gusrec  ( for external recognition by GusRecog )
variable hipsi   ( "high-psi" tag on wavecrest concept )
( I = Index in loops; does not require a fetch "@" )
variable img  ( visRecog: for future use as "image" )
variable indefartcon ( set indefinite article condition )
variable inflex1  ( inflection from VerbPhrase to SpeechAct )
variable instnum  ( instantiation number for whatIs/Be )
variable IQ 6 IQ ! ( an invitation to code an IQ algorithm)
variable isflag   ( 7dec2009 To detect input of "IS" )
variable jrt ( ReJuvenate "junior time" for memories moved)
variable jux  0 jux ! ( holds Psi # of a JUXtaposed word )
variable kbcon  ( flag for awaiting a yes-or-no answer 2jul2011 )
variable kbpsi  ( 20jan2008 an interim knowledge-base psi )
variable kbquiz 0 kbquiz !  ( flag to call kbSearch )
variable kbtv  0 kbtv !  ( KbTraversal trigger; 7aug2010 )
variable kbyn  ( holds kbtv values for asking Y/N 24jun2011 )
variable kibosh  ( suppresses concepts failing to win selection )
variable krt ( Knowledge Representation time "t" for later)
variable lastpho  ( 24may2009 to avoid extra "S" on verbs )
variable lastword  0 lastword !  ( for zeroing "seq" tags.)
variable len  ( length, for avoiding non-words in AudInput)
variable lexact  ( testing a lexical "act" for EnReify )
variable lopsi  ( "low-psi" tag on just-crested concept )
variable lurk ( counter to activate initial thinking; 19sep2010 )
variable match  ( end-of-word flag for control )
variable maxbeact ( to prevent BeVerb from calling AskUser )
variable memoire  ( instead of "motjuste" in kbSearch )
variable mfn  ( "masculine feminine neuter" gender flag )
variable mfnflag ( gender flag to cause a who-query; 17aug2010 )
variable midway 1 midway ! ( limit for searching backwards)
variable monopsi ( 26jul2002 For use in audRecog module )
variable morphpsi ( for audRecog recognition of morphemes )
variable motjuste ( best word for inclusion in a thought )
variable nacpsi   ( 9may2009 de-globalized psi for NounAct)
variable nen  0 nen ! ( English lexical concept number )
variable newpsi   ( for singular-nounstem assignments ) 
variable nlt  0 nlt !  ( not-later-than among time-points )
variable notjux  ( flag for 12=NOT juxtaposed to a verb; 11aug2011 )
variable nounval 0 nounval ! ( from NounPhrase to MounAct )
variable nphrnum 0 nphrnum ! ( NounPhrase number )
variable nphrpos 0 nphrpos ! ( for testing in EnCog )
variable num 0 num !  ( number-flag for the psi array )
variable numflag ( 4dec2009 for selection of verb-forms )
variable numsubj ( 13apr2010 for number of subject )
variable nwc    ( new-word-count for noun-stem recog )
variable objold  ( a test for optimizing slosh-over; 12oct2010 )
variable obstat ( Lets AudInput psi-damp a reentrant word.)
variable oldact ( show the source of spreading activations)
variable oldpos ( old part-of-speech for use with verbs )
variable oldpsi ( used in OldConcept to de-globalize "psi")
variable olfpsi ( concept-tag attached to smells in memory)
variable olfrec ( for external recognition by OlfRecog )
variable onset 0 onset ! ( of an auditory memory engram )
variable opt  ( option, for flushing out a part of speech )
variable ordo 0 ordo ! ( from JSAI; AudInput word-order )
variable penultpho  ( 17may2009 next-to-last phoneme )
variable pho ( phoneme of input/output & internal reentry )
variable pos  ( old- & newConcept; enVocab: part-of-speech)
variable posflag  ( AskUser discriminand; 9aug2010 )
variable pov  ( point-of-view: #35 internal; *42 external )
variable pre ( previous concept associated with a concept )
variable precand  ( inviolate "pre" candidate from JSAI )
variable predflag ( indicates predicate nominative 11sep2010 )
variable predpos 0 predpos ! ( Predicate part of speech )
variable prejux  ( previous jux to carry NOT to verb 21jul2011 )
variable prepho   ( 17may2009 previous phoneme )
variable prepsi ( synaptic deglobalized "pre" in SpreadAct)
variable preset 0 preset ! ( for setting InStantiate "pre")
variable prevtag  ( from JSAI; for use in InStantiate )
variable prsn  0 prsn ! ( 1st, 2nd, 3rd person )
variable psi ( identifier of a psi concept in Psi mindcore)
variable psi1 ( activation-level at each node of verb )
variable psi3 0 psi3 ! ( for VerbPhrase to find negation 25jun2011 )
variable psi7 ( tutorial enx in tutorial or diagnostics )
variable psibase ( winning psibase with winning actbase )
variable putnum  ( putative number for subj-verb agreement )
variable questype  ( oldConcept; Conjoin: "question-type" )
variable quiet 1 quiet ! ( status flag for auditory input )
variable quo ( 27dec2009 query-object for EnCog response )
variable quobj ( query-object for yes-or-no questions 24jun2011 )
variable qup ( 28dec2009 query-predicate if verb not given )
variable qus ( 27dec2009 query-subject for EnCog response )
variable quset ( 3jan2010 query-set flag from OldC to EnCog )
variable qusub  ( internal provisional query-subject; 3oct2010 )
variable qutop ( query-topic to maintain chain of thought 26jul2010 )
variable quverb  ( query-verb for yes-or-no questions 24jun2011 )
variable recnum  ( recognized number of a recognized word 19jul2011 )
variable recon 0 recon ! ( reconnaissance flag for Q & A )
variable reject 0 reject ! ( used in sentence-generation )
variable retropsi   ( for AudInput and Audmem noun-stems )
variable residuum 0 residuum ! ( activation after PsiDamp )
variable rjc  0 rjc ! ( rejuvenation counter for tracking )
variable rsvp 1000 rsvp ! ( user-response delay-counter)
variable rv ( "recall-vector" for diagnostic display )
variable seq  ( subSEQuent concept associated with another)
variable seqpsi ( synaptic deglobalized "seq" in SpreadAct)
variable singflag  ( singularity flag for singular nouns )
variable skipseq  ( possible replacement for lackseq 30jul2011 )
variable sknlp  ( 8jan2010 SelfRef "skip NLP" for EnCog )
variable spacegap  ( to add gap of one space in SpeechAct )
variable spike  ( 1aug2005: for potential use in SpreadAct)
variable spt  ( AudMem; AudInput: blank space time )
variable stemgap  ( for avoiding false audRecog stems )
variable stempsi  ( for singular noun-stem recognition )
variable subj     ( flag to supercharge subject-nouns )
variable subjectflag  ( 3dec2009 a default for NounPhrase )
variable subjnum ( for agreement with predicate nominative )
variable subjold ( old subject as default candidate 28sep2010 )
variable subjpsi  ( For Predicate to correct beVerb choice)
variable sublen   ( length of audRecog subpsi word-stem )
variable subpsi ( for AudRecog of sub-component wordstems )
variable supsi    ( subject-psi for calculating "thotnum" )
variable t  0 t ! ( time incremented during AudMem storage)
variable t2s ( auditory text-to-speech index for SpeechAct)
variable tacpsi  ( concept-tag attached to tactile engrams)
variable tacrec   ( for external recognition by TacRecog )
variable tbev  ( time of be-verb for use with aftjux 27jul2011 )
variable tdy  ( 27dec2009 "temporary duty" of NLP modules )
variable tkbn  ( time of KbRetro noun adjustment; 2jul2011 )
variable tkbv  ( time of KbRetro verb adjustment; 2jul2011 )
variable topic  ( topic for a question to be asked )
variable topicnum ( grammatical number of question "topic")
variable tov 1 tov ! ( time-of-voice for keeping track )
variable trc  ( 20dec2009 tabula-rasa-counter like rjc )
variable tsday    ( for AudListen transcript-mode headers )
variable tseln  ( time of selection of noun;  8may2011 )
variable tselo  ( time of selection of object 30jul2011 )
variable tsels  ( time of selection of subj. 28jul2011 )
variable tselv  ( time of selection of verb;  8may2011 )
variable tshour   ( AudListen )
variable tsminute ( AudListen )
variable tsmonth  ( AudListen )
variable tssecond ( AudListen )
variable tsyear   ( AudListen )
variable tult     ( t penultimate, or time-minus-one )
variable unk  ( "unknown" variable for general use )
variable unkflag  ( 7dec2009 for NewConcept to pass to SelfRef )
variable upnext  ( Flag lets new input de-crest previous. )
variable urpre ( original pre during call to other module )
variable urpsi ( original psi for use in psiDamp, etc. )
variable vacpsi  ( de-globalized psi for VerbAct; 27sep2010 ) 
variable vault 439 vault ! ( size of EnBoot; 21jul2011 )
variable vbpsi   ( verb-psi for calculating "thotnum" )
variable verbpsi  ( for transit into WhatAuxSVerb 13jun2011 )
variable verbval  ( transfer from VerbPhrase to VerbAct )
variable vispsi ( concept-tag attached to images in memory)
variable visrec   ( for external recognition by VisRecog )
variable vphract  ( verb phrase activation level 19jun2011 )
variable vphraud  ( holds aud-fetch for SpeechAct; 25jun2011 )
variable vpos     ( verb part of speech for inflections )
variable vrsn 20110818 vrsn ! ( version identifier; 18aug2011 )
variable whatdoflag ( 21jan2010 for what-do query response )
variable whereflag 0 whereflag ! ( for InStantiate )
variable whoflag   0 whoflag !   ( for InStantiate )
variable whomark  ( InStantiate: for sake of qutopl 26jul2010 )
variable wordend  ( for singular noun-stem assignments )
variable yesorno 0 yesorno ! ( in conjunction w. KbSearch )
variable yncon ( statuscon to trigger yes-or-no query 2jul2011 )
variable ynverb  ( yes-or-no verb for AskUser; 24jun2011 )
variable zone  ( time-zone for "pre" and "seq" searches )

:  CHANNEL   ( size num -< name >- )
  CREATE   ( Returns address of newly named channel. )
  OVER     ( #r #c -- #r #c #r )
  ,        ( Stores number of rows from stack to array.)
  * CELLS  ( Feeds product of columns * rows to ALLOT.)
  ALLOT    ( Reserves given quantity of cells for array.)
  DOES>    ( member; row col -- a-addr )
  DUP @    ( row col pfa #rows )
  ROT *    ( row pfa col-index )
  ROT +    ( pfa index )
  1 +      ( because first cell has the number of rows.)
  CELLS +  ( from number of items to # of bytes in offset )
;


cns @  8  CHANNEL  psi{  ( Mindcore concept array "psi" )
cns @  8  CHANNEL   en{  ( English lexicon array "en" )
cns @  6  CHANNEL  aud{  ( Auditory memory channel "aud" )


:  PsiClear  ( set Psi activations to zero; 26sep2010 )
\ CR ." PsiClear called by " caller @ .  \ test; 7may2011
  1   t @  1 +  DO
    0 I 1 psi{ !
  -1 +LOOP
;  ( End of PsiClear )


:  TabulaRasa
  0 trc !  ( 20dec2009 tabula-rasa-counter like jrc )
  1 tov !
  BEGIN  cns @  1  DO
    0 I  trc @  psi{ !
  LOOP
  1  trc +!
  trc @  8  <  WHILE
  REPEAT
  0 trc !
  1 tov !
  BEGIN  cns @  1  DO
    0 I  trc @   en{ !
  LOOP
  1  trc +!
  trc @ 8 < WHILE  \ Cover #0 to #7, i.e. 8
  REPEAT
  0 trc !
  1 tov !
  BEGIN  cns @  1  DO
    0 I  trc @  aud{ !
  LOOP
  1  trc +!
  trc @  6  <  WHILE
  REPEAT
  cns @  1  DO
    32   I  0   aud{ !
  LOOP
;  ( End of TabulaRasa )


\ SubjectClear is a mechanism to help SelfRef and EnCog in
\ answering "what-do" questions. A subject noun is deactivated
\ so that slosh-over activation may identify an answer.
:  SubjectClear ( remove activation from a subject ) \ 19jan2010
  CR ." SubjectClear runs " \ test; remove; 15sep2010
  midway @  cns @  DO     \  Loop backwards over time.
    I     0 psi{ @ qus @ = IF  \ Look for qus query-subject
      0 I 1 psi{ !    \ 19jan2010 Set subject to zero activation.
    THEN              \ 19jan2010 End of test for query-subject
  -1  +LOOP  \  End of backwards loop looking for query-subject
;  ( End of SubjectClear )


\ NounClear is a mechanism called by NounPhrase to set
\ activation on nouns and pronouns to zero just before
\ a pair of old and new noun-engrams is reduced even
\ further into negative activation by neural inhibition.
\ The purpose is to prevent the build-up of stray activations.
:  NounClear ( remove activation from all nouns ) \ 20dec2009
  midway @  cns @  DO     \  Loop backwards over time.
  \ I     5 psi{ @ 5 = IF  \ 20dec2009 Look for noun pos.
    I 5 psi{ @ 5 = I 5 psi{ @ 7 = OR IF \ pro(noun) 18aug2011
      0 I 1 psi{ !    \ 20dec2009 Set noun to zero activation.
    THEN              \ 20dec2009 End of test for pos=5 nouns.
  -1  +LOOP  \  End of backwards loop looking for pos=5 nouns.
;  ( End of NounClear; return to NounPhrase; 18aug2011 )


:  VerbClear ( remove activation from all verbs )
  midway @  t @  DO
    I     5 psi{ @ 8 = IF
      0 I 1 psi{ !
    THEN
  -1  +LOOP
;  ( End of VerbClear )


:  VerbClip ( lower activation on all verbs )
  midway @  t @  DO
    I     5 psi{ @ 8 = IF
      I   1 psi{ @ 12 > IF  \ test; REMOVE? 25aug2010
      6 I 1 psi{ +!   \ test; 25aug2010
      THEN
    THEN
  -1  +LOOP
;  ( End of VerbClip; return to AudInput )


:  PsiDecay ( let conceptual activations dwindle )
  fyi @ 2 > IF CR
    ."       PsiDecay called to reduce all "
    ." conceptual activations." CR
  THEN
  midway @  t @  DO
    I    1 psi{ @ 0 > IF \ avoid inhibited nodes; 9sep2010
      I  1 psi{ @ 40 > IF  34 actran ! THEN  \  4aug2011
      I  1 psi{ @ 50 > IF  35 actran ! THEN  \  4aug2011
      I  1 psi{ @ 60 > IF  36 actran ! THEN  \  4aug2011
      I  1 psi{ @ 70 > IF  37 actran ! THEN  \  4aug2011
      I  1 psi{ @ 80 > IF  38 actran ! THEN  \  4aug2011
      I  1 psi{ @ 90 > IF  39 actran ! THEN  \  4aug2011
    actran @ 0 > IF actran @ I 1 psi{ ! THEN  \ 16may2011
      0 actran !  \ Reset to zero for safety; 16may2011
        I  1 psi{ @  1 -        I  1  psi{  !
    THEN  \ end of test to skip inhibited nodes; 9sep2010
    I  1  psi{ @  0 < IF  1  I  1  psi{ +! THEN  \ 6sep2010
    I  0  psi{ @ 59 = IF  0  I  1  psi{  ! THEN  \ 59=DO
    I  0  psi{ @ 54 = IF  0  I  1  psi{  ! THEN  \ 54=WHAT
    I  0  psi{ @  7 = IF  0  I  1  psi{  ! THEN  \  7=THE
  -1  +LOOP
;  ( End of PsiDecay )


:  PsiDamp ( reduce activation of a concept )
  ( 33-48 = consciousness tier where concepts win selection. )
  ( 17-32 = subconscious where concepts remain available. )
  (  1-16 = noise tier below logical association threshold. )
  16 residuum !
  fyi @ 2 > IF CR
  ."     PsiDamp called for urpsi = " urpsi @ .
  ."  by module ID #" caller @ .
  caller @  42 = IF ." WhatAuxSDo " THEN
  caller @  51 = IF ." AuxVerb "    THEN
  caller @  62 = IF ." VerbPhrase " THEN
  caller @  66 = IF ." NounPhrase " THEN
  caller @ 104 = IF ." AudInput "   THEN
  caller @ 148 = IF ." Activate "   THEN
  caller @ 3535 = IF ." AudInput "  THEN
  caller @ 6967 = IF ." EnCog "     THEN \ test; 26sep2010
  caller @ 8766 = IF ." WhoBe "     THEN \ test; 26sep2010
  caller @ 8773 = IF ." WhatBe "    THEN \ changed; 25feb2011
  0 caller !
  THEN
  urpsi @ 57 = IF  58 urpsi ! THEN  \ 57=AM;  14aug2011
  urpsi @ 66 = IF  58 urpsi ! THEN  \ 66=IS;  14aug2011
  urpsi @ 67 = IF  58 urpsi ! THEN  \ 67=ARE; 14aug2011
  urpsi @ 55 = IF  \ if urpsi is 55=WHO
    1 residuum !   \ deemphasize WHO; test; 25jul2010
  THEN  \ test; 25jul2010
  ( code to prevent psi-damping inhibited concepts; 6sep2010 )
  midway @  t @  DO
            I  0  psi{ @ urpsi @ = IF \ concept found; 6sep2010
            I  1  psi{ @ -1 > IF  \ positive act.? 16aug2011
 residuum @ I  1  psi{ !  \ psi-damp only high activations
      THEN  \ end of test for only positive act.; 6sep2010
    THEN  \ end of test for particular concept; 6sep2010
  -1 +LOOP
  0 residuum ! 
;  ( End of PsiDamp )


:  EnDamp ( deactivate English lexicon concepts )
  midway @  t @  DO
    0 I  1  en{ !
  -1 +LOOP
;  ( End of EnDamp )


:  AudDamp ( deactivate auditory engrams )
  midway @  t @  DO
    0 I  1 aud{ !
  -1 +LOOP
;  ( End of AudDamp )


:  .psi ( show concepts in the Psi array )
  CR  ." Psi mindcore concepts"
  CR  ." time: psi act num jux pre pos seq enx "
  t @ 1+  midway @ DO
    I    0  psi{ @ 0 > IF
      CR I . ." : "
      I  0  psi{ @ . ." "
      I  1  psi{ @ . ." "
      I  2  psi{ @ . ." "
      I  3  psi{ @ . ." "
      I  4  psi{ @ . ." "
      I  5  psi{ @ . ." "
      I  6  psi{ @ . ." "
      I  7  psi{ @ enx ! enx @ .
      enx @ 0 > IF
        ." to "
        I unk !
        0 aud !
        midway @ unk @  DO
          I   0 en{ @  enx @ = IF
            I 7 en{ @  aud  !
            aud @ 0= NOT IF
              BEGIN
                aud @ 0 aud{ @ EMIT
                1 aud +!
                aud @ 0 aud{ @ 32 =
              UNTIL
              ."  "
            THEN
            0 aud !
          LEAVE  ( One engrammed word is enough. )
          THEN
        -1  +LOOP
      THEN
    THEN
  LOOP
  CR ." time: psi act num jux pre pos seq enx "  0 unk !
  CR ." You may enter .psi or .en or .aud to view memory "
  ." engrams or "
  CR ." MainLoop [ENTER] to erase all memories "
  ." and restart the Mind."
  CR
;  ( End of .psi post-Escape report )


:  .en ( show vocabulary in the English lexicon array )
  CR ." English lexical fibers"
  CR ." t nen act num mfn fex pos fin aud:" \ 13apr2010
  t @  1+  midway @  DO
    I  0  en{ @  unk !
    unk @  0 > IF ( display positive data )
      CR I . unk @ . ." "
      I 1 en{ @ . ." "
      I 2 en{ @ . ." "
      I 3 en{ @ . ." "
      I 4 en{ @ . ." "
      I 5 en{ @ . ." "
      I 6 en{ @ . ." "
      I 7 en{ @ aud !  aud @ . ."  to "
      BEGIN
        aud @ 0 aud{ @ EMIT  1 aud +!
        aud @ 0 aud{ @ 32 =
      UNTIL
      ."  "
      0 aud !
    THEN
  LOOP
  0 unk !
  CR ." t nen act num mfn fex pos fin aud" CR
  CR ." You may enter .psi or .en or .aud to view memory "
  ." engrams or "
  CR ." MainLoop [ENTER] to erase all memories "
  ." and restart the Mind."
  CR
;  ( End of .en post-Escape report )


:  .aud ( show engrams in the auditory memory array )
  CR ." Auditory memory nodes"
  CR  ."  t pho act pov beg ctu audpsi"
  t @  1+  1 DO           ( Show the entire Aud channel.)
    CR    I . ." "
    I 2 aud{ @ 123  =  IF
      ."     { "
    THEN
    I 0 aud{ @  33  <  IF
      ."  "  ( show a blank )
    ELSE
      I 0 aud{ @ EMIT ."  "
      I 1 aud{ @ .     ." "
      I 2 aud{ @ EMIT ."  "
      I 3 aud{ @ .     ." "
      I 4 aud{ @ .     ." "
      I 5 aud{ @ .
    THEN
    I 2 aud{ @ 125  =  IF
      ."     } "
    THEN
    I cns @ > IF QUIT THEN  \ safety measure; 26jul2010
  LOOP
  CR ." You may enter .psi or .en or .aud to view memory "
  ." engrams or "
  CR ." MainLoop [ENTER] to erase all memories "
  ." and restart the Mind."
  CR
;  ( End of .aud post-Escape report )


: .echo ( show what the robot just said )
  ( As on Usenet, user responds _below_ the AI output. )
  fyi @ 2 = IF
    CR ." Tutorial mode is now in effect. "
    ."  Enter input or wait for output."
  THEN
  CR  ." Robot: "
    tov @ t @ = IF   \ 12jan2010 Test for equality.
      tov @ 1 - tov !  \ 12jan2010 Prevent infinite loops.
    THEN  \ 12jan2010 End of test for tov @ t equality.
    t @ tov @  DO
      I 0  aud{ @  0 =  IF
        ."  "
      ELSE
        I   2 aud{ @  42 = NOT IF
          I 0 aud{ @ EMIT
        THEN
      THEN
    LOOP
;  ( End of .echo )


: SpreadAct  ( spreading activation )
  pre @ 0 > IF
    zone @ 7 -   zone @  DO
      I 0  psi{ @   prepsi @  =  IF  \ now prepsi; 15sep2010
                1   I  1 psi{ +!
        I zone  @  6 - > IF LEAVE THEN
      THEN
    -1  +LOOP
  THEN
  seqpsi @ 0 > IF  \ replacing seqsyn; 15sep2010
    fyi @ 3 = IF
      CR ." SprA seqpsi & spike = " seqpsi @ . spike @ . CR
    THEN
    zone @ 32 +   zone @  DO  \ Search past non-seq psi.
      I 0  psi{ @  seqpsi @  =  IF  \ replacement 15sep2010
        fyi @ 3 = IF
          CR ." SprA matching seqpsi w. spike = " \ 24sep2010
          seqpsi @ .  spike @ . CR  \ non-global 24sep2010
        THEN
        fyi @ 1 > IF
          pov @ 35 = IF
            0 psi7 !
            fyi @ 3 = IF
              CR ." sprdAct: seqpsi = " seqpsi @ . CR \ 24sep2010
            THEN
            midway @ t @ DO
              I   0  psi{ @ cogpsi @ = IF
                I 7  psi{ @   psi7 !
                LEAVE
              THEN
            -1  +LOOP
            midway @ t @ DO
              I   0  en{ @    psi7 @ = IF
                I 7  en{ @  rv !
                LEAVE
              THEN
            -1  +LOOP
            0 rv !
            midway @ t @ DO
              I   0  psi{ @  seqpsi @ = IF  \ 15sep2010
                I 7  psi{ @   psi7 !
                LEAVE
              THEN
            -1  +LOOP
            midway @ t @ DO
              I   0  en{ @    psi7 @ = IF
                I 7  en{ @  rv !
                LEAVE
              THEN
            -1  +LOOP
            rv @ 0 > IF
              BEGIN
                rv @ 0 aud{ @ EMIT  1 rv +!
                rv @ 0 aud{ @ 32 =
              UNTIL
            THEN
            0 rv !
            ."  "
          THEN
        THEN   \ end of FYI=1;  2aug2011
        fyi @ 2 > IF
          pov @ 35 = IF
            CR
            0 psi7 !
            midway @ t @ DO
              I   0  psi{ @   cogpsi @  =  IF
                I 7  psi{ @   psi7 !
                LEAVE
              THEN
            -1  +LOOP
            midway @ t @ DO
              I   0  en{ @    psi7 @ = IF
                I 7  en{ @  rv !
                LEAVE
              THEN
            -1  +LOOP
            rv @ 0 > IF
              BEGIN
                rv @ 0 aud{ @ EMIT  1 rv +!
                rv @ 0 aud{ @ 32 =
              UNTIL
            THEN
            0 rv !
            ."  #" cogpsi @ . ." act " oldact @ .
            ." at i " I . ." sprA spike "
            spike @ . ." to seqpsi #" seqpsi @ . \ 20sep2010
            midway @ t @ DO
              I   0  psi{ @  seqpsi @ = IF  \ 15sep2010
                I 7  psi{ @   psi7 !
                LEAVE
              THEN
            -1  +LOOP
            midway @ t @ DO
              I   0  en{ @    psi7 @ = IF
                I 7  en{ @  rv !
                LEAVE
              THEN
            -1  +LOOP
            rv @ 0 > IF
              BEGIN
                rv @ 0 aud{ @ EMIT  1 rv +!
                rv @ 0 aud{ @ 32 =
              UNTIL
            THEN
            0 rv !
            CR
            ."  at act " I 1 psi{ @ . ." yields "
          THEN
        THEN    \ end of FYI=2+  2aug2011
        fyi @ 3 = IF
          ." SprA: spiking seqpsi " spike @ . seqpsi @ .
        THEN
        I           1 psi{ @ -1 > IF \ avoid inhibition;
          subjectflag @ 1 = IF  \ onto verb-nodes; 18oct2010
          ( insert diagnostic code here to troubleshoot 5aug2011 )
            spike @ I 1 psi{ +!  ( add spike to seqpsi 15sep2010 )
          ELSE  \ in all other cases, e.g. dirobj; 25jun2011
          ( insert diagnostic code here to troubleshoot 5aug2011 )
            spike @ I 1 psi{  !  ( Xfer absolute act; 25jun2011 )
          THEN  \ end of test for subject-nodes; 18oct2010
        THEN  \ end of test to skip inhibited nodes; 9sep2010
        fyi @ 2 > IF
          pov @ 35 = IF
            I 1 psi{ @ .
            fyi @ 2 > IF
              ." and zone = " zone @ .
            THEN
          THEN
        THEN
        fyi @ 3 = IF
          I 1 psi{ @ . ." (lim = 63) for t=" I rv !
          BEGIN
            -1 rv +!
            rv @ 3 aud{ @ 1 =
          UNTIL
          rv @ .
          BEGIN
            rv @ 0 aud{ @ EMIT  1 rv +!
            rv @ 0 aud{ @ 32 =
          UNTIL
          ."  engram; in sprA spike = " spike @ .
          0 rv !
        THEN
        I zone  @  6 + > IF
          fyi @ 2 > IF
            CR ." executing LEAVE at zone = " zone @ .
          THEN
          LEAVE
        THEN
        LEAVE  \ After finding one seqpsi; 13oct2010
      THEN   \ end of test for matching Psi#; 8aug2011
    LOOP
  THEN
;  ( End of SpreadAct; return to NounAct, VerbAct or ReActivate )


:  NounAct ( re-activate all recent nodes of a concept )
  0 unk !  \ reset before using in NounAct; 8aug2011
  26 nounval !  \ decremend; test; remove; 8aug2011
  fyi @ 2 > IF CR  \ 5jan2010 Altering the next line:
  ."     Calling NounAct (not in AI4U). nacpsi = " nacpsi @ . CR
  THEN
  nacpsi @  0 >  IF
    fyi @ 2 > IF
      CR ."       NounAct calls SpreadAct to transfer "
      CR ." proportionate activation from each node of "
      CR ." concept #" psi @ .
    THEN
    midway @   t @  DO
      I 0 psi{ @ nacpsi @ = IF
      -3 unk +!  \ for decrementing spike over time; 8aug2011
      ( insert diagnostic code here; 8aug2011 )
     \ 26   I  1 psi{ !  \ trying revert to 4aug; 6aug2011
  nounval @ I  1 psi{ !  \ whether integer or variable; 8aug2011
            I  0 psi{ @  54 = IF
          0 I  1 psi{ !
              PsiDecay  \ await active subject; 24sep2010
              PsiDecay  \ commenting out 1 of 2 29jul2011
            THEN
                  12 spike !  ( Aim for ample spikes.)
          I  4 psi{ @  prepsi !  ( for SpreadAct 15sep2010 )
          I  6 psi{ @  seqpsi !  ( for SpreadAct 15sep2010 )
          I           zone !     ( for use in SpreadAct )
          I  1 psi{ @  0 = IF  0 spike ! THEN
          I  1 psi{ @  5 > IF 12 spike ! THEN
          I  1 psi{ @ 10 > IF 24 spike ! THEN  \  3nov2010
          I  1 psi{ @ 15 > IF 26 spike ! THEN  \  3nov2010
          I  1 psi{ @ 20 > IF 28 spike ! THEN  \  3nov2010
          I  1 psi{ @ 25 > IF 30 spike ! THEN  \  4jun2011
          I  1 psi{ @ 30 > IF 32 spike ! THEN  \  4jun2011
          I  1 psi{ @ 35 > IF 34 spike ! THEN  \  4jun2011
          I  1 psi{ @ 40 > IF 36 spike ! THEN  \  4jun2011
          I  1 psi{ @ 45 > IF 38 spike ! THEN  \  4jun2011
          I  1 psi{ @ 50 > IF 40 spike ! THEN  \  4jun2011
          I  1 psi{ @ 55 > IF 42 spike ! THEN  \  4jun2011
          I  1 psi{ @ 60 > IF 44 spike ! THEN  \  4jun2011
        nacpsi @ cogpsi !
          I  1 psi{ @ oldact !
          I  5 psi{ @ oldpos !
        seqpsi @  0 > IF  \ replacement; 15sep2010
          seqpsi @ 55 = IF  \ 55=WHO; 15sep2010
            1 spike !  \ not 24 act; 11aug2010
          THEN   \ end of experiment; 11aug2010
          ( insert diagnostic code here; 8aug2011 )
        unk @ -10 < IF -10 unk ! THEN  \ limit decrement 8aug2011
        unk @ spike +!  \ decrement spike; 8aug2011
          7865 caller !
          SpreadAct  ( for spreading activation )
          -1 spike +!  \ to let recent engrams win; 8aug2011
          0 caller !
          0 prepsi !  \ replacing presyn; 15sep2010
          0 seqpsi !  \ replacing seqsyn; 15sep2010
        THEN
        precand @ pre !
        0 oldpos !
        0 cogpsi !
        0 oldact !
        0  pre !
      THEN
      0 spike !  \ reset for each new loop; 14oct2010
    -1  +LOOP
  THEN
  0 spike !
;  ( End of NounAct )


:  VerbAct ( re-activate all recent nodes of a verb )
  28 verbval !  \ trying revert to 5aug; 6aug2011
  fyi @ 2 > IF CR
  ."     Calling verbAct (not in AI4U). psi = " psi @ . CR
  THEN
  vacpsi @  0 >  IF  \ if a vacpsi exists; 9nov2010
    fyi @ 2 > IF
      CR ."       VerbAct calls SpreadAct to transfer "
      CR ." proportionate activation from each node of "
      CR ." concept #" psi @ .
    THEN
    vacpsi @ 57 = vacpsi @ 66 = OR vacpsi @ 67 = OR IF \ 10aug2011
      58 vacpsi !  \ convert to 58=BE to find seqpsi; 10aug2011
    THEN  \ end of test to switch AM IS ARE to 58=BE; 10aug2011
    vacpsi @ cogpsi !  \ deglobalizing from psi; 27sep2010
    midway @   t @ DO
      I 0 psi{ @ vacpsi @ = IF  \ deglobalized psi; 8oct2010
        fyi @ 2 > IF
          I 1 psi{ @ 8 > IF
            ." +"
          THEN
        THEN
            I  1 psi{ @  psi1 !
          I    1 psi{ @ -1 > IF \ avoid inhibited nodes; 9sep2010
          ( insert diagnostic code here; 6aug2011 )
   verbval @ I  1 psi{ +!  \ CUMULATIVE for slosh-over; 14oct2010
          THEN  \ end of test to skip inhibited nodes; 9sep2010
            I  0 psi{ @  54 = IF
          0 I  1 psi{ !
            THEN
          I  4 psi{ @  prepsi !  ( for SpreadAct 15sep2010 )
          I  6 psi{ @  seqpsi !  ( for SpreadAct 15sep2010 )
          I           zone !     ( for use in SpreadAct )
          I  1 psi{ @  0 = IF  0 spike ! THEN
          I  1 psi{ @  0 > IF  1 spike ! THEN
          I  1 psi{ @  5 > IF  3 spike ! THEN  \  2nov2010
          I  1 psi{ @ 10 > IF  6 spike ! THEN
          I  1 psi{ @ 15 > IF  9 spike ! THEN
          I  1 psi{ @ 20 > IF 12 spike ! THEN
          I  1 psi{ @ 25 > IF 15 spike ! THEN
          I  1 psi{ @ 30 > IF 16 spike ! THEN  \ 4aug2011
          I  1 psi{ @ 35 > IF 17 spike ! THEN  \ 4aug2011
          I  1 psi{ @ 40 > IF 18 spike ! THEN  \ 4aug2011
          I  1 psi{ @ 45 > IF 19 spike ! THEN  \  4aug2011
          I  1 psi{ @ 50 > IF 30 spike ! THEN
          I  1 psi{ @ 55 > IF 33 spike ! THEN
          I  1 psi{ @ 60 > IF 36 spike ! THEN
          I  1 psi{ @ 65 > IF 39 spike ! THEN  \  2nov2010
          I  1 psi{ @ 70 > IF 42 spike ! THEN  \  2nov2010
          I  1 psi{ @ 75 > IF 45 spike ! THEN  \  2nov2010
          I  1 psi{ @ 80 > IF 48 spike ! THEN  \  2nov2010
          I  1 psi{ @ 85 > IF 50 spike ! THEN  \  9nov2010
          I  1 psi{ @ 90 > IF 52 spike ! THEN  \  9nov2010
          I  1 psi{ @ 95 > IF 54 spike ! THEN  \  9nov2010
        vacpsi @ cogpsi !  \ deglobalizing; 27sep2010
          I  1 psi{ @ oldact !
          I  5 psi{ @ oldpos !
 fyi @ 2 = IF  \ In Tutorial mode show slosh-over; 17oct2010
   CR  ."    VerbAct calls SpreadAct with activation " \ 18oct
   spike @ . ." for Psi #" seqpsi @ . \ 18oct2010
 THEN  \  End of test for Tutorial mode; 17oct2010
        seqpsi @  0 > IF  \ replacement; 15sep2010
        ( insert diagnostic code here; 6aug2011 )
          8665 caller !
          SpreadAct  ( for spreading activation )
          0 caller !
          0 prepsi !  \ replacing presyn; 15sep2010
          0 seqpsi !  \ replacing seqsyn; 15sep2010
        THEN
        0 oldpos !
        0 cogpsi !
        0 oldact !
        0  pre !
        0  seq !
      THEN
      ( perhaps reset spike to zero for each loop? 14oct2010 )
      0 spike !  \ reset to start each loop again; 14oct2010
    -1  +LOOP
  THEN
;  ( End of VerbAct )


:  ReActivate ( re-activate recent nodes of a concept )
  fyi @ 2 > IF CR
  ."     Calling ReActivate. psi = " psi @ . CR
  THEN
  0 spike !
  psi @  0 >  IF
    fyi @ 2 > IF
      CR ."       ReActivate calls SpreadAct to transfer "
      CR ." proportionate activation from each node of "
      CR ." concept #" psi @ .
    THEN
    midway @ tov @  DO  \ Omitting current input; 29may2011
      I 0 psi{ @ psi @ = IF
         pov @ 42 = IF  \ Only during "*" external POV; 7may2011
           35 I  1 psi{ +!  \ Relative, not absolute; 12aug2011
         THEN   \  End of new test for external POV;  7may2011
            I  0 psi{ @  54 = IF  \ 54=WHAT; 24sep2010
          0 I  1 psi{ !
            THEN
            I  0 psi{ @  55 = IF  \ 55=WHO;  3may2011
          0 I  1 psi{ !  \ As in InStantiate; 3may2011
            THEN  \ end of test for 55=WHO;  3may2011
            I  0 psi{ @  59 = IF  \ 12jan2010 59=DO
          0 I  1 psi{ !   \ 12jan2010 For what-do queries.
            THEN          \ 12jan2020 End of test for 59=DO
        0 oldpos !
        0 cogpsi !
        0 oldact !
        0    pre !
        0 prepsi !  \ replacing presyn; 15sep2010
        0    seq !
        0 seqpsi !  \ replacing seqsyn; 15sep2010
        0   psi1 !
        1  spike !
      THEN
    -1  +LOOP
    0 caller !
    0 urpsi !
  THEN
;  ( End of ReActivate )


:  InStantiate ( create a concept-fiber node )
  precand @ 0 > IF precand @ pre ! THEN
  ordo @ 1 = IF  0 prevtag ! THEN
  lastword @ 1 = IF
    0 seq !
    0 lastword !
  THEN
  t @ 439 > IF   \  Avoid the EnBoot vault  19jul2011
    whoflag @ 1 = IF
      psi @ 57 = IF 57 beflag ! THEN  ( AM )
      psi @ 66 = IF 66 beflag ! THEN  ( IS )
      psi @ 67 = IF 67 beflag ! THEN  ( ARE )
      pos @ 5 = pos @ 7 = OR IF
        beflag @ seq !
        0 beflag !
      THEN
    THEN
    psi @ 54 = IF  \ Special handling of psi #54 "WHAT"
      1 indefartcon ! \ Set indefinite article condition 16apr2011
      0 act !      \ To suppress "WHAT" during answer.
    THEN           \ End of test for input of "WHAT"
    psi @ 55 = IF  \ Special handling of psi #55 WHO; 3may2011
      1 defartcon ! \ Set definite article condition 16apr2011
      1 whoflag !
      1 whomark !  \ for who-is queries; 26jul2010
      0 act !      \ To suppress "WHO" during answer.
    THEN
    singflag @ 1 = IF
      pos @ 5 = IF
        1 num !
        0 singflag !
      THEN
    THEN
    psi @ 1 =  psi @ 83 = OR IF  \ "A" or "AN"; 6aug2011
      1 singflag !
      0 act !
    THEN
  THEN
  pos @ 5 = IF  \ noun either external or internal; 6aug2011
    recnum @ 0 > IF   \ If positive recog-num; 6aug2022
      recnum @ num !  \ Override num(ber); 6aug2011
      0 recnum !  \ reset for safety; 6aug2011
    THEN  \ End of test for positive recog-num; 6aug2011
  THEN  \ End of test for a 5=pos noun; 6aug2011
  pov @ 42 = IF  \ If POV is external; 24jun2011
    num @ 0 = IF  \ if no num(ber) is assigned; 24jun2011
      putnum @ 0 > IF   \ if putative number is positive
        putnum @ num !  \ replace zero with putative num
      THEN  \ end of test for positive putnum; 24jun2011
    THEN   \ end of test for missing num-value; 24jun2011
    pos @ 8 = IF putnum @ num ! THEN \ test; 24jun2011
    pos @ 5 = IF psi @ quobj ! THEN  \ for AskUser; 6aug2011
  THEN  \ End of test for #internal POV;  7may2011
  pov @ 35 = IF  \ If POV is pound-sign internal; 3may2011
   num @ 0 = IF  \ if no num(ber) is assigned; 24jun2011
     putnum @ 0 > IF   \ if putative number is positive
       putnum @ num !  \ replace zero with putative num
       0 putnum !  \ zero for safety; test; 5aug2011
     THEN  \ end of test for positive putnum; 24jun2011
   THEN   \ end of test for missing num-value; 24jun2011
   pos @ 8 = IF putnum @ num ! THEN \ test; 24jun2011
    0 act !  \ 0 activation for ReEntry concepts; 26apr2011
  THEN  \ End of test for #internal POV;  7may2011
  prevtag @ pre !
  ( concept fiber psi )             psi @  t @  0 psi{ !
  ( Set "act" activation level. )   act @  t @  1 psi{ +!
  ( Set "num" number flag       )   num @  t @  2 psi{ !
  ( Store JUXtaposition tags. )     jux @  t @  3 psi{ !
  ( Store PREvious associand. )     pre @  t @  4 psi{ !
  ( Store functional pos code. )    pos @  t @  5 psi{ !
  ( Store the subSEQuent tag. )     seq @  t @  6 psi{ !
  ( Store the EN-transfer tag. )    enx @  t @  7 psi{ !
  num @ instnum !
  pos @ 5 = IF num @ putnum ! THEN \ noun to verb; 24jun2011
  0 num !
  jux @ 12 = IF 0 jux ! THEN  \ reset after use; 21jul2011
  prejux @ 12 = IF  \ 12=NOT from OldConcept; 21jul2011
    12 jux !  \  set jux for next instantiand; 21jul2011
    0 prejux !  \ reset for safety; 21jul2011
  THEN  \  end of post-instantiation test; 21jul2011
  mfn @ 1 =  mfn @ 2 = OR IF  \ masc or fem; 17aug2010
    mfn @ mfnflag !  \   17aug2010
  THEN   \ 17aug2010
  mfn @ 0 = IF  0 mfnflag ! THEN  \ test; 25aug2010
  0 mfn !  \ Test code applies only to En array.
  0 preset !
  pos @ 5 = pos @ 7 = OR IF
    psi @ prevtag !
  THEN
  ordo @ 1 > IF
    psi @ seq !
    vault @  t @ 2 -  DO
      I 0 psi{ @  0 > IF  \ Upon finding a single psi
        skipseq @ 1 = IF  \ if set one loop ago; 11aug2011
          t @ 12 -  t @ 4 -  DO  \ go further back; 21sep2010
            I     0 psi{ @ 0 > IF  \ Upon finding single psi
              I   5 psi{ @ 8 = IF  \ a verb
                I 6 psi{ @ 0 = IF  \ upon a zeroed seq
                  seq @ I 6 psi{ !  \ replace the seq
                THEN   \ end of test for a zeroed seq
                LEAVE  \ change only one seq
              THEN  \ end of test for "8" verb
            THEN  \  end of test for a positive psi
          -1 +LOOP  \ end of loop checking for a zero-seq
          0 skipseq !  \ reset after use; 11aug2011
        THEN   \ end of test of a lacking seq
        seq @ 12 = IF  \ 12=NOT; 28jul2011
          0 seq ! \ replace NOT with zero; 28jul2011
          1 skipseq ! \ flag for lack of "seq"; 11aug2011
        THEN  \ end of test for 12=NOT; 28jul2011
        seq @ 83 = IF  1 seq ! THEN \ treat AN as A
        seq @ 1 =  seq @ 7 = OR IF  \ A or THE
          0 seq ! \ replace A, AN, THE with zero
          1 skipseq ! \ flag for lack of "seq"; 11aug2011
        THEN  \ end of test for articles
        whoflag @ 1 = IF  \ during who-query
           I 0 psi{ @ 66 = IF  \ 66=IS
             0 seq !  \ after 66=IS blank seq
             0 whoflag !  \ reset for safety
           THEN  \ end of test for 66=IS
        THEN  \ end of test for who-query
        whoflag @ 1 = IF  \ during who-query; 25aug2010
           I 0 psi{ @ 58 = IF  \ 58=BE
             0 seq !  \ after 58=BE blank seq
             0 whoflag !  \ reset for safety
           THEN  \ end of test for 58=IF
        THEN  \ end of test for who-query; 25aug2010
        seq @ I 6 psi{ !
        LEAVE  \ Store only a recent "seq"
      THEN  \ end of test for a positive psi; 23aug2010
    -1 +LOOP
  THEN
  0 recnum !  \ lest carry-over to other words; 19jul2011
  0 seq !
;  ( End of InStantiate )


:  EnVocab ( English Vocabulary node creation )
  ( Number "nen" of English )       nen @  t @  0  en{ !
  ( Do not store the activation level; it is a transient.)
  ( Store "num" number tag. )       num @  t @  2  en{ !
  ( Store "mfn" gender tag. )       mfn @  t @  3  en{ !
  ( Store mindcore EXit tag. )      fex @  t @  4  en{ !
  ( Store part of speech "pos".)    pos @  t @  5  en{ !
  ( Store mindcore IN tag. )        fin @  t @  6  en{ !
  ( Store the auditory "aud" tag. ) aud @  t @  7  en{ !
;  ( End of EnVocab )


:  EnParser ( determine the part of speech )
  5 bias !
  35 act !  \ Activate lower than ReActivate; 29may2011
\ 30 act !  \ Activate lower than ReActivate; 11aug2011
  pov @ 42 = IF  \ only during external input; 9oct2010
    act @ ordo @ - act !  \ reduce S-V-O act's; 9oct2010
  THEN  \ end of tesrt for external POV; 9oct2010
  InStantiate  \ create a Psi concept node; 6nov2010
  pos @ 5 = IF  8 bias !  THEN
  pos @ 7 = IF  8 bias !  THEN
  pos @ 8 = IF  5 bias !  THEN
;  ( End of EnParser )


\ Activations no longer need to be transferred as of 12aug2011.
:  EnReify ( express abstract concepts as real words )
  0 act !
  midway @  t   @  DO
          I   1 psi{ @  0 > IF
          I   1 psi{ @  lexact !
          I   2 psi{ @  num !
        \ I   7 psi{ @  enx !
        \ I   0  en{ @  enx @ = IF \ test; 2aug2011
        \ I   0  en{ @  enx @ = IF \ Commenting out; 8aug2011
 lexact @ I   1  en{ !
    num @ I   2  en{ !
            0 lexact !
        \ THEN
         THEN
    0 enx !
    0 act !
    0 lexact !
  -1  +LOOP
  0 act !
;  ( End of EnReify )


:  KbSearch ( knowledge base search )
  ordo @ 2 = IF
    NounAct  ( may need a "nacpsi" value )
    EnReify
  THEN
  ordo @ 3 = IF
    0 act !
    midway @ t  @ DO
      I     5 en{ @  8 = IF   \ Test part-of-speech.
        I   1 en{ @  act @ > IF  ( if en1 is higher )
          I 0 en{ @  memoire !  ( store psi-tag of word )
          I 1 en{ @  act !  ( to test for a higher en1 )
        THEN
      THEN
    -1 +LOOP
    yesorno @ 0 > IF
      memoire @ psi @ = IF
        1 yesorno +!
      ELSE
        0 yesorno !
      THEN
    THEN
    psi @ vacpsi !  \ deglobalizing; 27sep2010
    VerbAct
    0 vacpsi !  \ reset for safety; 27sep2010
    EnReify
  THEN
  ordo @ 4 = IF
    0 act !
    0 memoire !
    midway @ t  @ DO
      I 5 en{ @ 5 = I 5 en{ @ 7 = OR IF
        I    1 en{ @  act @ > IF  ( if en1 is higher )
          I  0 en{ @  memoire !  ( store psi-tag of word )
          I  1 en{ @  act !  ( to test for a higher en1 )
        THEN
      THEN
    -1 +LOOP
    yesorno @ 0 > IF
      memoire @ psi @ = IF
        1 yesorno +!
      ELSE
        0 yesorno !
      THEN
    THEN
  THEN
  0 kbquiz !
  ordo @ 4 = IF 0 ordo ! THEN
;  ( End of KbSearch )


( http://code.google.com/p/mindforth/wiki/KbRetro )
:  KbRetro  ( retroactive adjustment of knowledge base )
  oldpsi @ 27 =  oldpsi @ 32 =  OR IF  \ yes or no 2jul2011
  \ CR ."  KbRetro: answer is " oldpsi @ .  \ 2jul2011
    oldpsi @ 27 = IF  \ 27=NO; 2jul2011
      64  tkbn @  1 psi{ ! \ high noun activation 21jul2011
      64  tkbv @  1 psi{ ! \ set high activation? 2jul2011
      12  tkbv @  3 psi{ ! \ set 12=NOT jux flag; 2jul2011
  \ CR ."  KbRetro: answer is No "  \ 2jul2011
    THEN  \ End of test for "No" answer; 2jul2011
    oldpsi @ 32 = IF  \ 32=YES; 2jul2011
      64  tkbv @  1 psi{ ! \ set high activation? 2jul2011
  \ CR ."  KbRetro: answer is Yes "  \ 2jul2011
    THEN \ End of test for "Yes" answer; 2jul2011
  ELSE  \ if neither; 2jul2011
    0  tkbn @  4 psi{ ! \ delete pre-tag for noun; 2jul2011
    0  tkbn @  6 psi{ ! \ delete seq-tag for noun; 2jul2011
    0  tkbv @  4 psi{ ! \ delete pre-tag for verb; 2jul2011
    0  tkbv @  6 psi{ ! \ delete seq-tag for verb; 2jul2011
  \ CR ."  KbRetro: answer is neither Yes nor No "
  THEN  \ 2jul2011
  0 kbcon !  \ temporarily here turn off kbcon;  2jul2011
  0 tkbn !  \ reset for safety;  2jul2011
  0 tkbv !  \ reset for safety;  2jul2011
;  ( End of KbRetro; return to OldConcept; 2jul2011 )


:  OldConcept ( recognize a known word )
  28 act !  \ A value subject to optimization; 28sep2010
  midway @ t @ DO
    I 0 en{ @ oldpsi @ = IF
    I 2 en{ @    0 > IF
  \ I 2 en{ @  num ! THEN  \ Commenting out on 19jun2011
    I 2 en{ @  unk ! THEN  \ Preserve global "num" value.
    I 3 en{ @    0 > IF
    I 3 en{ @  mfn ! THEN
    I 4 en{ @    0 > IF
    I 4 en{ @  fex ! THEN
    I 5 en{ @    0 > IF
    I 5 en{ @  pos ! THEN
    I 6 en{ @    0 > IF
    I 6 en{ @  fin ! THEN
    LEAVE
    THEN
  -1 +LOOP
    pos @ 8 = IF  \ verb? for WhatAuxSVerb 13jun2011
      numsubj @ unk !  \ assume agreement; 19jun2011
    THEN  \ end of test for verb \ 13jun2011
  oldpsi @ 57 = IF t @ tbev ! THEN  \ 57=AM;  27jul2011
  oldpsi @ 58 = IF t @ tbev ! THEN  \ 58=BE;  28jul2011
  oldpsi @ 66 = IF t @ tbev ! THEN  \ 66=IS;  27jul2011
  oldpsi @ 67 = IF t @ tbev ! THEN  \ 67=ARE; 27jul2011
  ( oldpsi found by AudRecog )   oldpsi @  t @  0  en{ ! 
\ ( Store zero activation. )          0    t @  1  en{ !
  ( Add zero activation 28jul2011 )   0    t @  1  en{ +!
  ( Store number tag; 19jun2011 )   unk @  t @  2  en{ !
  ( Store "mfn" gender tag. )       mfn @  t @  3  en{ !
  ( Store mindcore EXit tag. )      fex @  t @  4  en{ !
  ( Store part of speech "pos".)    pos @  t @  5  en{ !
  ( Store mindcore IN tag. )        fin @  t @  6  en{ !
  ( Store the auditory "aud" tag. ) aud @  t @  7  en{ !
  pov @  35 = IF fex @ oldpsi ! THEN  ( internal pov )
  pov @  42 = IF fin @ oldpsi ! THEN  ( external pov )
  oldpsi @  enx !
  oldpsi @ 12 = IF  \ 12=NOT; 27jul2011
    tbev @ 0 > IF   \ if positive be-verb time; 27jul2011
    12  tbev @  3 psi{ !  \ set verb "jux" to NOT; 27jul2011
    0 tbev !  \ reset for safety; 27jul2011
    THEN  \ end of test for a positive tbev; 27jul2011
  THEN  \ end of test for input of 12=NOT; 27jul2011
  oldpsi @ 54 = IF 8 act ! THEN  ( 54=WHAT )
  oldpsi @ 55 = IF 8 act ! THEN  ( 55=WHO )
  ordo @ 1 = IF
    oldpsi @ 59 = IF  ( 59=DO )
      1 kbquiz !
    THEN
  THEN
  oldpsi @ 59 = IF 0 act ! THEN  ( 59=DO )
  oldpsi @  7 = IF 1 act ! THEN  (  7=THE )
  kbcon @  0 > IF  \ if awaiting answer; 2jul2011
    KbRetro  \ retroactively adjust knowledge base;  2jul2011
  THEN  \  2jul2011
  oldpsi @ 12 = IF  \ 12=NOT; 21jul2011
    12 prejux !  \ set flag for verb; 21jul2011
    12 aftjux !  \ set flag for a be-verb; 28jul2011
  \ CR ." OldPsi: setting prejux to 12=NOT " \ 21jul2011
  THEN  \ end of test for 12=NOT negation; 21jul2011
  oldpsi @ psi !
  EnParser
  fyi @ 2 > IF CR
  ."   from OldConcept "
  THEN
  pov @ 42 = IF  ( external pov )
    whatdoflag @ 1 = IF  \ If flag set after "what do"
      psi @ 59 = IF  \ After "DO"
        quset @ 0 = IF  \ Prevent call during reply.
        \ CR ." OldC calling PsiClear " \ test; 7may2011
          PsiClear  \ Zero out MindGrid for sake of query.
        THEN  \ End of test of quset
      THEN  \ End of test for 59=DO.
    THEN   \ End of test for "what do" flag.
    ReActivate
  THEN
  0 act !
  pov @ 35 = IF  ( internal pov )
    1 match !
  THEN
  pos @ 8 = IF psi @ quverb ! THEN  \ for yes-or-no; 24jun2011
  kbquiz @ 0 > IF
    1 yesorno !
    KbSearch
  THEN
  yesorno @ 0 > IF
    KbSearch
  THEN
  0 pos !  \ Reset no longer above but down here.
;  ( End of OldConcept; return to AudInput )


:  NewConcept ( machine learning of new concepts )
  0 newpsi !
  1 unkflag !  \ for SelfRef NOT-KNOW response.
  1 nen +!
  1 nwc +!
  nen @ IQ !
  nen @ newpsi !
  nen @ stempsi !
  nen @ psi !
  nen @ fex !
  nen @ fin !
  bias @ pos !
  bias @ 8 = IF putnum @ num !  THEN  \ 24jun2011
  EnVocab ( to create an English vocabulary node )
  0 fex !
  0 fin !
  nen @  enx !
  EnParser
  pos @ 8 = IF nen @ quverb ! THEN  \ for yes-or-no; 24jun2011
  kbcon @  0 > IF  \ if awaiting answer; 2jul2011
    KbRetro  \ retroactively adjust knowledge base;  2jul2011
  THEN  \  2jul2011
  0 pos !
  0 act !
;  ( End of NewConcept )


:  AudRecog ( auditory recognition )
  0 audrec !
  0 psi !
  8 act !
  0 actbase !
  midway @  spt @ DO
    I 0 aud{ @ pho @ = IF  \ If incoming pho matches stored aud0;
      I 1 aud{ @ 0 = IF    \ if matching engram has no activation;
        I 3 aud{ @ 1 = IF  \ if beg=1 on matching no-act aud engram;
       \ audrun @ 1 = IF   \ if comparing start of a word; 8may2010
         audrun @ 2 < IF   \ if comparing start of a word; 8may2010
          I 4 aud{ @ 1 = IF   \ If beg-aud has ctu=1 continuing,
            8 I 1+   1 aud{ !  \ activate the N-I-L character,
            0 audrec !
          ELSE
            len @ 1 = IF
              I 5 aud{ @  monopsi !
            THEN  \ End of test for one char length.
          THEN   \ end of test for continuation of beg-aud
         THEN  \ end of test for audrun=1 start of word.
        THEN   \ end of test for a beg(inning) non-active aud0
      THEN   \ end of test for matching aud0 with no activation
      I 1 aud{ @ 0 > IF  \ If matching aud0 has activation,
        0 audrec !       \ Zero out any previous audrec.
        I 4 aud{ @ 1 = IF  \ If act-match aud0 has ctu=1 continuing,
          2 act +!           \ Increment act for discrimination.
          0 audrec !         \ because match-up is not complete.
          act @ I 1+   1 aud{ ! \ Increment for discrimination.
        THEN  \ end of test for active-match aud0 continuation
        I 4 aud{ @ 0 = IF  \ If ctu=0 indicates end of word
          len @ 2 = IF  \ If len(gth) is only two characters.
          \ I 1 aud{ @ 0 > IF  \ Or test for eight (8).
            I 1 aud{ @ 7 > IF  \ testing for eight (8).
              I 5 aud{ @ psibase !  \ Assume a match.
            THEN  \  End of test for act=8 or positive.
          THEN   \ End of test for two-letter words.
        THEN   \ End of test for end of word.
        I 1 aud{ @ 8 > IF  \ If activation higher than initial
          8 actbase !  \ Since act is > 8 anyway; 8may2010
          I 4 aud{ @ 0 = IF  \ If matching word-engram now ends,
            I 1 aud{ @ actbase @ > IF  \ Testing for high act.
              I 5 aud{ @ audrec !  \ Fetch the potential tag
              I 5 aud{ @ subpsi !  \ Seize a potential stem.
              len @ sublen !    \ Hold length of word-stem.
              I 5 aud{ @ psibase !  \ Hold onto winner.
              I 2 psi{ @ recnum !   \ recognized number 19jul2011
              I 1 aud{ @ actbase !  \ Winner is new actbase.
            THEN  \ End of test for act higher than actbase.
          ELSE
            0 audrec !
            monopsi @ 0 > IF
              monopsi @ audrec !
              0 monopsi !
            THEN   \ End of inner test.
          THEN  \ End of test for final char that has a psi-tag.
        THEN  \  End of test for engram-activation above eight.
      THEN  \ End of test for matching aud0 with activation.
    THEN  \ End of test for a character matching "pho".
    I midway @ = IF  \ If a loop reaches midway; 8may2010
      1 audrun +!  \ Increment audrun beyond unity; 8may2010
    THEN   \ End of test for loop reaching midway; 8may2010
  -1 +LOOP
  0 act !
  0 actbase !
  psibase @ 0 > IF
     psibase @  audrec !
  THEN
  audrec @ 0 = IF
    monopsi @ 0 > IF
      len @ 2 < IF
        monopsi @ audrec !
      THEN
      0 monopsi !
   audrec @ 0 = IF
        psibase @ 0 > IF
          psibase @ audrec !
        THEN
      THEN
    THEN
  THEN
  audrec @ 0 = IF
      morphpsi @ audrec !
    sublen @ 0 > IF
      len @ sublen @ -  stemgap !
    THEN
    stemgap @ 0 < IF 0 stemgap ! THEN
    stemgap @ 1 > IF 0 subpsi ! THEN
    stemgap @ 1 > IF 0 morphpsi ! THEN
    stemgap @ 1 > IF 0 audrec ! THEN
  THEN
  subpsi @ morphpsi !
  0 psibase !
  0 subpsi !
  audrec @ 0 > IF
    stemgap @ 2 > IF
      0 audrec !
    THEN
  THEN
  audrec @ audpsi !
;  ( End of AudRecog; return to AudMem auditory memory )


:  AudMem ( auditory memory channel )
  t @ vault @ > IF
    pho @ 32 > IF
      AudRecog
    THEN  ( ASCII 32 = SPACE-bar )
  THEN
    t @ 1-  0 aud{ @  0 = IF  1 beg !  THEN
    t @ 1-  0 aud{ @ 32 = IF  1 beg !  THEN
    pho @  t @  0 aud{ !
    pov @  t @  2 aud{ !
    beg @  t @  3 aud{ !
    ctu @  t @  4 aud{ !
    ctu @ 0 = IF
      audpsi @ 0 > IF
        audpsi @  t @  5 aud{ !
      THEN
      0 audpsi !
    THEN
    pov @ 42 = IF
      pho @ 83 = IF
        0 stempsi !
        wordend @ 1 = IF
            0 t @ 1- 4 aud{ !
        THEN
        0 newpsi !
      THEN
    THEN
    pho @ 32 = IF t @ spt !  THEN
;  ( End of AudMem; return to AudInput )


:  AudListen ( preparation for AudInput )
  rsvp @  1  DO
    KEY? IF
      KEY pho !
      0 quiet !
      pho @  8 = IF 7 EMIT THEN
      pho @  9 = IF
         400 rsvp !  ( 23dec2009 From Supercomputer mind.frt )
        pho @ 13 = IF  1 lastword !  THEN
        fyi @ 0 = IF CR CR
          TIME&DATE  tsyear ! tsmonth ! tsday !
          tshour ! tsminute ! tssecond !
          ." Transcript of AI Mind interview at "
          tshour @ . tsminute @ . tssecond @ .
          ." o'clock on " tsday @ .
          tsmonth @  1 = IF ." January "   THEN
          tsmonth @  2 = IF ." February "  THEN
          tsmonth @  3 = IF ." March "     THEN
          tsmonth @  4 = IF ." April "     THEN
          tsmonth @  5 = IF ." May "       THEN
          tsmonth @  6 = IF ." June "      THEN
          tsmonth @  7 = IF ." July "      THEN
          tsmonth @  8 = IF ." August "    THEN
          tsmonth @  9 = IF ." September " THEN
          tsmonth @ 10 = IF ." October "   THEN
          tsmonth @ 11 = IF ." November "  THEN
          tsmonth @ 12 = IF ." December "  THEN
          tsyear @ . 8 EMIT 46 EMIT CR
        THEN
        1 fyi +!
        fyi @ 3 > IF 0 fyi ! THEN
        fyi @ 0 = IF CR ." Normal display mode. Tab 1 = "
          ." Transcript; 2 = Tutorial; 3 = Diagnostic." CR
        THEN
        fyi @ 2 = IF CR
          ."   Tutorial mode reveals the internal "
          ." thinking of the AI Mind." CR CR
        THEN
        fyi @ 3 = IF CR
          ." Diagnostic messages - ignore during input "
          ." until you press ENTER." CR
        THEN
        0  pho !
      THEN
      pho @ 27 = IF
        0 nounval !
        0 lopsi !   0 hipsi !
        CR
        CR ." User Command:  halt" 0 pho ! 0 rjc ! 0 fyi !
        CR ." You may enter .psi or .en or .aud to view "
        ." memory engrams, or " CR ." MainLoop [ENTER] "
        ." to erase memories and restart the Mind."
        CR ." Type 'bye' to quit Forth, EXIT to quit DOS."
        CR
        0 audpsi ! 0 newpsi ! 0 oldpsi ! 0 stempsi !
        0 areflag !    \ 11dec2009 In case AI is run again.
        1 audrun !     \ 26jul2010 In case AI is run again.
        0 beact !      \ 10aug2010 In case AI is run again.
        0 defartcon !  \ 16apr2011 In case AI is run again.
        0 indefartcon ! \ 16apr2011 In case AI is run again.
        0 isflag !     \  7dec2009 In case AI is run again.
        0 kbtv !       \ 28sep2010 In case AI is run again.
        0 maxbeact !   \ 19aug2010 In case AI is run again.
        0 mfn !        \ 25aug2010 In case AI is run again.
        0 mfnflag !    \ 23aug2010 In case AI is run again.
        0 motjuste !   \ 29aug2010 In case AI is run again.
        0 objold !     \ 12oct2010 In case AI is run again.
        0 ordo !       \ 21dec2009 In case AI is run again.
        0 prsn !       \ 29aug2010 In case AI is run again.
        0 psi1 !       \ 25aug2010 In case AI is run again.
        0 qus !        \ 27dec2009 In case AI is run again.
        0 quset !      \  3jan2010 In case AI is run again.
        0 quo !        \ 27dec2009 In case AI is run again.
        0 qup !        \ 28dec2009 In case AI is run again.
        0 sknlp !      \  8jan2010 In case AI is run again.
        0 subjold !    \  9oct2010 In case AI is run again.
        0 subjpsi !    \  1jan2010 In case AI is run again.
        0 vphract !    \ 21jun2011 In case AI is run again.
        0 whatdoflag ! \ 21jan2010 In case AI is run again.
        0 whoflag !    \ 23jul2010 In case AI is run again.
        0 unkflag !    \  7dec2009 In case AI is run again.
        QUIT
      THEN
      pho @ 0 > IF
        pho @ EMIT
      THEN
      pho @ DUP 96 > IF
        DUP 123 < IF
          32 -
        THEN
      THEN  pho !
      LEAVE
      ELSE
      ."  "
    THEN
    8  EMIT
  LOOP
  pho @ 0 > IF \ if user enters data; 19sep2010
    0 lurk !  \ reset; 19sep2010
  THEN   \ end of test for user entry; 19sep2010
  1 lurk +!   \ test; remove; 19sep2010
;  ( End of AudListen )


:  AudInput ( accept auditory input )
  0 match !
  0 upnext !
  0 urpsi !
  t @ nlt !
  pov @  42 = IF
    fyi @ 2 = IF
      ."     AudInput calls AudListen "
      ."  (Tab key will slow the AI down)." CR
    THEN
     t @ spt !
     t @ 8 >  IF  .echo  THEN  ( show output of AI )
     CR ." Human: "
  THEN
  140 0 DO ( Accept a tweet of 140 characters from Twitter)
    pov @ 35 = IF  ( during internal re-entry )
      pho @ 13 = IF  \ if a CR is declared; 8may2010
        1 audrun !  \ Reset to one at CR end of input.
      THEN  \ end of test for a declared CR; 8may2010
      1 upnext +!
      upnext @ 1 = IF
        obstat @ 0 = IF
          kbpsi @ lopsi !
          0 kbpsi !
          lopsi @ urpsi !
          3535 caller !
          pho @ 64 > IF
            urpsi @ qup @ = IF
              urpsi @ vacpsi ! \ prep to deglobalize; 27sep2010
              urpsi @ psi ! VerbAct
              0 vacpsi !  \ reset for safety; 27sep2010
            THEN
          THEN
          hipsi @ lopsi !
          0 caller !
          0 urpsi !
          1 obstat !
        THEN
      THEN
      bias @ 5 = IF  \ If EnParser expects a noun; 6aug2011
        pho @ 83 = IF  \ If "83=S";  6aug2011
          2 num !  \ Assign plural number; 6aug2011
        THEN  \ Only terminating "S" governs "num" 6aug2011
        pho @  0 > IF   \ Disregard empty pho; 6aug2011
          pho @  32 = NOT IF  \ Disregard SPACE; 6aug2011
            pho @  13 = NOT IF  \ Disregard CR; 6aug2011
              pho @ 83 = NOT IF \ If other than "S"; 6aug2011
                1 num !  \ Assume singular number; 6aug2011
              THEN  \ If last letter is not "S"; 6aug2011
            THEN  \ End of test for carriage-return 6aug2011
          THEN  \  End of test for SPACE; 6aug2011
        THEN  \ End of test for empty pho; 6aug2011
      THEN  \ End of test for noun-expected; 6aug2011
    THEN  \ end of test for pov "35=#" internal reentry
    pov @ 42 = IF   ( during external input )
      AudListen
      pho @ 0 > IF
        0 kbtv !
        1 upnext +!
        upnext @ 1 = IF
          hipsi @ urpsi !  \ What-do queries require
          urpsi @ 0 > IF  \ only positive concepts; 14sep
            104 caller !  \ wiping out even of residuum.
          \ PsiDamp  \ leaving a "residuum" activation.
          \ PsiDamp  \ Commenting out; test; 11oct2010
          THEN  \ end of test for positive psi; 14sep2010
          hipsi @ lopsi ! \ Preventing a residuum lets
          0 caller !  \ SelfRef answer I DO NOT KNOW
          0 urpsi !  \ if no direct object is active.
        THEN
        400 rsvp !  ( give more time )
      THEN
      I 138 = IF
        rsvp @ 250 > IF 100 rsvp ! THEN
      THEN
      I 139 = IF
        pho @ 0 = IF
          rsvp @ 1 - rsvp !
          rsvp @ 2 < IF 400 rsvp ! THEN
        THEN
      THEN
      pho @ 32 = pho @ 13 = OR IF
        pho @ 13 = IF 10 EMIT THEN
        prepho @ 83 = IF
          0 t @ 1 - 4 aud{ !
          0 prepho !
        THEN
      THEN
      bias @ 5 = IF  \ If EnParser expects a noun 26may2011
        pho @ 83 = IF  \ If "S"
          2 num !  \ Assign plural number; 26may2011
        THEN  \ Only terminating "S" governs "num" 26may2011
        pho @  0 > IF   \ Disregard empty pho;  26may2011
          pho @  32 = NOT IF  \ Disregard SPACE; 26may2011
            pho @  13 = NOT IF  \ Disregard CR; 26may2011
              pho @ 83 = NOT IF \ If other than "S" 26may2011
                1 num !  \ Assume singular number; 26may2011
              THEN  \ If last letter is not "S"; 26may2011
            THEN  \ End of test for carriage-return 26may2011
          THEN  \  End of test for SPACE; 26may2011
        THEN  \ End of test for empty pho;  26may2011
      THEN  \ End of test for noun-expected; 26may2011
    THEN  \ End of test for external input
    pho @  0 > IF
      1 t +!
    THEN
    pho @ 13 = IF
       1 audrun !  \ Reset to one at CR end of input.
       1 quiet !
       1 beg !
      13 eot !
      32 pho !
      10 EMIT
      CR
       1 lastword !
    THEN
    pho @ 27 =  IF
      CR ." AudInput: halt"  0 pho !  0 fyi !  0 nounval !
      CR ." You may enter .psi .en .aud to view memory "
      ." engrams, or " CR ." MainLoop [ENTER] to erase "
      ." memories and run the AI again."
      0 lopsi !  0 hipsi !
      0 audpsi ! 0 newpsi ! 0 oldpsi ! 0 stempsi !
      QUIT
    THEN
    pho @ 32 = IF
      prepho @ penultpho !
      1 audrun !  \ Reset to unity at end of a word.
      1 ordo +!
      audpsi @ urpsi !
      0 upnext !
      t @  spt !
      t @  1 - tult !
      0  tult @  4 aud{ !
      audpsi @  0 >  IF
        0 sublen !
        onset @ aud !
        0 onset !
  audpsi @  tult @  5 aud{ !
        pov @ 42 = IF
          tult @ 0 aud{ @ 83 = IF
       tult @ 1- 5 aud{ @ audpsi @ = NOT IF
              0  tult @ 1- 4 aud{ !
            THEN
   audpsi @  tult @ 1- 5 aud{ !
          THEN
        THEN
        audpsi @ hipsi !
        audpsi @ oldpsi !
        OldConcept
        eot @ 13 = IF
          35 pov !
        THEN
        0 psi !
        0 audpsi !
        0 aud !
      ELSE
        len @ 0 > IF
          onset @ aud !
          hipsi @ lopsi !
          1 wordend !
          NewConcept
          psi @ hipsi !
            nen @  tult @  5 aud{ !
     nen @  tult @ 1- 5 aud{ !
            nen @ retropsi !
        THEN
      THEN
      AudDamp
      0 len !
      0 aud !
      eot @ 13 = IF
        5 bias !
      THEN
      0 psi !
    THEN
    1 beg !
    1 ctu !
    spt @ 1 + onset !
      t @  onset @  = IF  1 beg !  ELSE  0 beg !  THEN
    pho @ 32 > IF
      1 len +!
      AudMem
    THEN
    eot @ 13 = IF
      5 bias !
      1 quiet !
    THEN
    eot @  0 > IF
      eot @ 14 = IF
        1 quiet !
        0 eot !
        0 pho !
        LEAVE
      THEN
      14 eot !
    THEN
    pho @ 0 > IF
      pho @ prepho !
    THEN
    0 pho !
  LOOP
  hipsi @ kbpsi !
  0 newpsi !
  0 wordend !
;  ( End of AudInput; return to SensoryInput or SpeechAct. )


:  SensoryInput ( sensory input channels )
 ( SMELL  -- normal sensory stub for later implementation )
 ( VISION -- normal sensory stub for seed AI expansion )
 ( TOUCH  -- normal haptics stub for cybernetic organisms )
 ( TASTE  -- normal sensory stub for cyborg alife )
 ( SYNAESTHESIA -- an option in a multisensory AI )
     fyi @ 2 = IF
 ."   SensoryInput calls AudInput." CR
     THEN
   AudInput  ( for entry or reentry of phonemic ASCII )
 ( COMPASS  -- exotic sensory stub for use in robots )
 ( GEIGER   -- exotic: Geiger counter )
 ( GPS      -- exotic: Global Positioning System )
 ( INFRARED -- exotic )
 ( RADAR    -- exotic: RAdio Detection And Ranging )
 ( SONAR    -- exotic: SOund Navigation And Ranging )
 ( VSA      -- exotic: Voice Stress Analyzer lie detector )
 ( Wi-Fi    -- exotic: 802.11 wireless fidelity )
;  ( End of SensoryInput )


:  EnBoot ( English bootstrap of initial concepts )
  0 act ! 0 jux ! 35 pov ! 0 t ! t @ spt !
  ." clearing memory"
  CR ." There is no warranty for what this software does."
 ( ERROR -- first word so any bug will announce itself )
    1 t !  69 pho !  1 beg !  1 ctu !  0 audpsi ! AudMem \ E
    2 t !  82 pho !  0 beg !  1 ctu !  0 audpsi ! AudMem \ R
    3 t !  82 pho !  0 beg !  1 ctu !  0 audpsi ! AudMem \ R
    4 t !  79 pho !  0 beg !  1 ctu !  0 audpsi ! AudMem \ O
    5 t !  82 pho !  0 beg !  0 ctu ! 82 audpsi ! AudMem \ R
 82 nen !   3 mfn ! 82 fex !  5 pos ! 82 fin !  1 aud ! EnVocab
 82 psi !   1 num !  0 pre !  0 seq ! 82 enx ! InStantiate

 ( A -- for EnArticle module )
    7 t ! 65 pho !   1 beg !  0 ctu !  1 audpsi ! AudMem \ A
  1 nen !  0 mfn !   1 fex !   1 pos !  1 fin ! 7 aud ! EnVocab
  1 psi !  1 num !   0 pre !  0 seq !  1 enx ! InStantiate

 ( ALL -- for machine reasoning logic )
    9 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
   10 t ! 76 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ L
   11 t ! 76 pho !   0 beg !  0 ctu !  2 audpsi ! AudMem \ L
  2 nen !  0 mfn !   2 fex !   1 pos !  2 fin ! 9 aud ! EnVocab
  2 psi !  0 num !   0 pre !  0 seq !  2 enx ! InStantiate

 ( AN -- to be selected instead of "A" before a vowel )
   13 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
   14 t ! 78 pho !   0 beg !  0 ctu ! 83 audpsi ! AudMem \ N
 83 nen !  0 mfn !  83 fex !  1 pos ! 83 fin ! 13 aud ! EnVocab
 83 psi !  1 num !   0 pre !  0 seq ! 83 enx ! InStantiate

 ( AND -- for machine reasoning logic )
   16 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
   17 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
   18 t ! 68 pho !   0 beg !  0 ctu ! 17 audpsi ! AudMem \ D
 17 nen !  0 mfn !  17 fex !  3 pos ! 17 fin ! 16 aud ! EnVocab
 17 psi !  0 num !   0 pre !  0 seq ! 17 enx ! InStantiate

 ( ANY -- for machine reasoning logic )
   20 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
   21 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
   22 t ! 89 pho !   0 beg !  0 ctu !  3 audpsi ! AudMem \ Y
  3 nen !  0 mfn !   3 fex !  1 pos !  3 fin ! 20 aud ! EnVocab
  3 psi !  0 num !   0 pre !  0 seq !  3 enx ! InStantiate

 ( ANYTHING -- a default direct object for AskUser 19jul2011 )
   24 t ! 65 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ A
   25 t ! 78 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ N
   26 t ! 89 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ Y
   27 t ! 84 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ T
   28 t ! 72 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ H
   29 t ! 73 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ I
   30 t ! 78 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ N
   31 t ! 71 pho !   0 beg !  0 ctu ! 110 audpsi ! AudMem \ G
110 nen !  0 mfn ! 110 fex !  5 pos ! 110 fin ! 24 aud ! EnVocab
110 psi !  1 num !   0 pre !  0 seq ! 110 enx ! InStantiate

 ( ARE -- essential intransitive verb )
   33 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
   34 t ! 82 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ R
   35 t ! 69 pho !   0 beg !  0 ctu ! 67 audpsi ! AudMem \ E
 67 nen !  0 mfn !  67 fex !  8 pos ! 67 fin ! 33 aud ! EnVocab
 67 psi !  0 num !   0 pre !  0 seq ! 67 enx ! InStantiate

 ( BAD -- adjective for EnAdjective module )
   37 t ! 66 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ B
   38 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
   39 t ! 68 pho !   0 beg !  0 ctu ! 84 audpsi ! AudMem \ D
 84 nen !  0 mfn !  84 fex !  1 pos ! 84 fin ! 37 aud ! EnVocab
 84 psi !  0 num !   0 pre !  0 seq ! 84 enx ! InStantiate

( BE -- for SelfReferentialThought )
  41 t ! 66 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ B
  42 t ! 69 pho !   0 beg !  0 ctu ! 58 audpsi ! AudMem \ E
 58 nen !  0 mfn !  58 fex !  8 pos ! 58 fin ! 41 aud !  EnVocab
 58 psi !  0 num !   0 pre !  0 seq ! 58 enx ! InStantiate

 ( BECAUSE -- for machine reasoning logic )
   44 t ! 66 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ B
   45 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
   46 t ! 67 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ C
   47 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
   48 t ! 85 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ U
   49 t ! 83 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ S
   50 t ! 69 pho !   0 beg !  0 ctu ! 18 audpsi ! AudMem \ E
 18 nen !  0 mfn !  18 fex !  3 pos ! 18 fin ! 44 aud ! EnVocab
 18 psi !  0 num !   0 pre !  0 seq ! 18 enx ! InStantiate

 ( BECOME -- essential intransitive verb )
   52 t ! 66 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ B
   53 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
   54 t ! 67 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ C
   55 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
   56 t ! 77 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ M
   57 t ! 69 pho !   0 beg !  0 ctu ! 85 audpsi ! AudMem \ E
 85 nen !  0 mfn ! 85 fex !   8 pos ! 85 fin ! 52 aud ! EnVocab
 85 psi !  0 num !   0 pre !  0 seq ! 85 enx ! InStantiate

 ( BOY -- always masculine noun for use with gender flags )
   59 t ! 66 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ B
   60 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
   61 t ! 89 pho !   0 beg !  0 ctu ! 96 audpsi ! AudMem \ Y
 96 nen !  1 mfn !  96 fex !  5 pos ! 96 fin ! 59 aud !  EnVocab
 96 psi !  1 num !   0 pre !  0 seq ! 96 enx ! InStantiate

 ( BUT -- conjunction for ConJoin module )
   63 t ! 66 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ B
   64 t ! 85 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ U
   65 t ! 84 pho !   0 beg !  0 ctu ! 86 audpsi ! AudMem \ T
 86 nen !  0 mfn !  86 fex !  3 pos ! 86 fin ! 63 aud ! EnVocab
 86 psi !  0 num !   0 pre !  0 seq ! 86 enx ! InStantiate

( CHESS -- important singular AI noun ending in "S" 19jul2011 )
   67 t ! 67 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ C
   68 t ! 72 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ H
   69 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
   70 t ! 83 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ S
   71 t ! 83 pho !   0 beg !  0 ctu ! 111 audpsi ! AudMem \ S
111 nen !  0 mfn ! 111 fex !  5 pos ! 111 fin ! 67 aud !  EnVocab
111 psi !  1 num !   0 pre !  0 seq ! 111 enx ! InStantiate

 ( DATA -- always plural noun in correction of modern usage )
   73 t ! 68 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ D
   74 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
   75 t ! 84 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ T
   76 t ! 65 pho !   0 beg !  0 ctu ! 97 audpsi ! AudMem \ A
 97 nen !  0 mfn !  97 fex !  5 pos ! 97 fin ! 73 aud  ! EnVocab
 97 psi !  2 num !   0 pre !  0 seq ! 97 enx ! InStantiate

 ( DO -- essential for AuxVerb module )
   78 t ! 68 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ D
   79 t ! 79 pho !   0 beg !  0 ctu ! 59 audpsi ! AudMem \ O
 59 nen !  0 mfn !  59 fex !  8 pos ! 59 fin ! 78 aud ! EnVocab
 59 psi !  0 num !   0 pre !  0 seq ! 59 enx ! InStantiate

 ( DOES -- essential for AuxVerb module )
   81 t ! 68 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ D
   82 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
   83 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
   84 t ! 83 pho !   0 beg !  0 ctu ! 87 audpsi ! AudMem \ S
 87 nen !  0 mfn !  87 fex !  8 pos ! 87 fin ! 81 aud ! EnVocab
 87 psi !  1 num !   0 pre !  0 seq ! 87 enx ! InStantiate

 ( DOING -- high word-frequency verb participle )
   86 t ! 68 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ D
   87 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
   88 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
   89 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
   90 t ! 71 pho !   0 beg !  0 ctu ! 88 audpsi ! AudMem \ G
 88 nen !  0 mfn !  88 fex !  1 pos ! 88 fin ! 86 aud ! EnVocab
 88 psi !  0 num !   0 pre !  0 seq ! 88 enx ! InStantiate

 ( ELSE -- adverb to be ignored as part of input queries )
   92 t ! 69 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ E
   93 t ! 76 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ L
   94 t ! 83 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ S
   95 t ! 69 pho !   0 beg !  0 ctu ! 10 audpsi ! AudMem \ E
 10 nen !  0 mfn !  10 fex !  2 pos ! 10 fin ! 92 aud ! EnVocab
 10 psi !  0 num !   0 pre !  0 seq ! 10 enx ! InStantiate

 ( FOR -- preposition for EnPrep module )
   97 t ! 70 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ F
   98 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
   99 t ! 82 pho !   0 beg !  0 ctu ! 42 audpsi ! AudMem \ R
 42 nen !  0 mfn !  42 fex !  6 pos ! 42 fin ! 97 aud ! EnVocab
 42 psi !  0 num !   0 pre !  0 seq ! 42 enx ! InStantiate

 ( FRIEND -- for coding assignment of ad-hoc gender tags )
  101 t ! 70 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ F
  102 t ! 82 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ R
  103 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  104 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  105 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
  106 t ! 68 pho !   0 beg !  0 ctu ! 98 audpsi ! AudMem \ D
 98 nen !  0 mfn !  98 fex !  5 pos ! 98 fin ! 101 aud ! EnVocab
 98 psi !  1 num !   0 pre !  0 seq ! 98 enx ! InStantiate

 ( GIRL -- always feminine noun for use with gender flags )
  108 t ! 71 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ G
  109 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  110 t ! 82 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ R
  111 t ! 76 pho !   0 beg !  0 ctu ! 99 audpsi ! AudMem \ L
 99 nen !  2 mfn !  99 fex !  5 pos ! 99 fin ! 108 aud ! EnVocab
 99 psi !  1 num !   0 pre !  0 seq ! 99 enx ! InStantiate

 ( GOD -- masculine noun important for philosophy of AI )
  113 t ! 71 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ G
  114 t ! 79 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ O
  115 t ! 68 pho !   0 beg !  0 ctu ! 100 audpsi ! AudMem \ D
100 nen !  1 mfn ! 100 fex !  5 pos ! 100 fin ! 113 aud ! EnVocab
100 psi !  1 num !   0 pre !  0 seq ! 100 enx ! InStantiate

( GOOD -- adjective for EnAdjective module )
  117 t ! 71 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ G
  118 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  119 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  120 t ! 68 pho !   0 beg !  0 ctu ! 89 audpsi ! AudMem \ D
 89 nen !  0 mfn !  89 fex !  1 pos ! 89 fin ! 117 aud ! EnVocab
 89 psi !  0 num !   0 pre !  0 seq ! 89 enx ! InStantiate

( HAS -- high word-frequency irregular verb form )
  122 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  123 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
  124 t ! 83 pho !   0 beg !  0 ctu ! 90 audpsi ! AudMem \ S
 90 nen !  0 mfn !  90 fex !  8 pos ! 90 fin ! 122 aud ! EnVocab
 90 psi !  1 num !   0 pre !  0 seq ! 90 enx ! InStantiate

( HAVE -- high word-frequency verb )
  126 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  127 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
  128 t ! 86 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ V
  129 t ! 69 pho !   0 beg !  0 ctu ! 70 audpsi ! AudMem \ E
 70 nen !  0 mfn !  70 fex !  8 pos ! 70 fin !  126 aud ! EnVocab
 70 psi !  2 num !   0 pre !  0 seq ! 70 enx ! InStantiate

( HE -- high word-frequency pronoun )
  131 t !  72 pho !  1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  132 t !  69 pho !  0 beg !  0 ctu ! 49 audpsi ! AudMem \ E
 49 nen !   1 mfn ! 49 fex !  7 pos ! 49 fin ! 131 aud ! EnVocab
 49 psi !   1 num !  0 pre !  0 seq ! 49 enx ! InStantiate

( HELLO -- for human-computer interaction )
  134 t ! 72 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ H
  135 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
  136 t ! 76 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ L
  137 t ! 76 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ L
  138 t ! 79 pho !   0 beg !  0 ctu !  26 audpsi ! AudMem \ O
 26 nen !  0 mfn !  26 fex !  4 pos !  26 fin ! 134 aud !  EnVocab
 26 psi !  0 num !   0 pre !  0 seq ! 105 enx ! InStantiate

( HER -- high word-frequency pronoun )
  140 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  141 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  142 t ! 82 pho !   0 beg !  0 ctu ! 91 audpsi ! AudMem \ R
 91 nen !  2 mfn !  91 fex !  7 pos ! 91 fin ! 140 aud !  EnVocab
 91 psi !  0 num !   0 pre !  0 seq ! 91 enx ! InStantiate

( HERE -- adverb for discussion of physical location )
  144 t ! 72 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ H
  145 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
  146 t ! 82 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ R
  147 t ! 69 pho !   0 beg !  0 ctu ! 101 audpsi ! AudMem \ E
101 nen !  0 mfn ! 101 fex !  2 pos ! 101 fin ! 144 aud !  EnVocab
101 psi !  0 num !   0 pre !  0 seq ! 101 enx ! InStantiate

( HIM -- high word-frequency pronoun )
  149 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  150 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  151 t ! 77 pho !   0 beg !  0 ctu ! 92 audpsi ! AudMem \ M
 92 nen !  1 mfn !  92 fex !  7 pos ! 92 fin ! 149 aud ! EnVocab
 92 psi !  1 num !   0 pre !  0 seq ! 92 enx ! InStantiate

( HIS -- high word-frequency pronoun )
  153 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  154 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  155 t ! 83 pho !   0 beg !  0 ctu ! 93 audpsi ! AudMem \ S
 93 nen !  0 mfn !  93 fex !  1 pos ! 93 fin ! 153 aud ! EnVocab
 93 psi !  0 num !   0 pre !  0 seq ! 93 enx ! InStantiate

( HOW -- adverb for EnAdverb module )
  157 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  158 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  159 t ! 87 pho !   0 beg !  0 ctu ! 11 audpsi ! AudMem \ W
 11 nen !  0 mfn ! 11 fex !   2 pos ! 11 fin ! 157 aud ! EnVocab
 11 psi !  0 num !   0 pre !  0 seq ! 11 enx ! InStantiate

( IF -- for machine reasoning logic )
  161 t !  73 pho !  1 beg !  1 ctu !  0 audpsi ! AudMem \ I
  162 t !  70 pho !  0 beg !  0 ctu ! 20 audpsi ! AudMem \ F
 20 nen !   0 mfn ! 20 fex !  3 pos ! 20 fin ! 161 aud ! EnVocab
 20 psi !   0 num !  0 pre !  0 seq ! 20 enx ! InStantiate

( IN -- preposition for EnPrep module )
  164 t ! 73 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ I
  165 t ! 78 pho !   0 beg !  0 ctu ! 44 audpsi ! AudMem \ N
 44 nen !  0 mfn !  44 fex !  6 pos ! 44 fin ! 164 aud ! EnVocab
 44 psi !  0 num !   0 pre !  0 seq ! 44 enx ! InStantiate

( IS -- for machine reasoning logic -- 58 fin as of 30jul2010 )
  167 t ! 73 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ I
  168 t ! 83 pho !   0 beg !  0 ctu ! 66 audpsi ! AudMem \ S
 66 nen !  0 mfn !  66 fex !  8 pos ! 58 fin ! 167 aud ! EnVocab
 58 psi !  1 num !   0 pre !  0 seq ! 66 enx ! InStantiate

( IT -- high word-frequency pronoun )
  170 t !  73 pho !  1 beg !  1 ctu !  0 audpsi ! AudMem \ I
  171 t !  84 pho !  0 beg !  0 ctu ! 95 audpsi ! AudMem \ T
 95 nen !   3 mfn ! 95 fex !  7 pos ! 95 fin ! 170 aud !  EnVocab
 95 psi !   1 num !  0 pre !  0 seq ! 95 enx ! InStantiate

( KNOW -- germane to artificial intelligence )
  173 t ! 75 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ K
  174 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
  175 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  176 t ! 87 pho !   0 beg !  0 ctu ! 61 audpsi ! AudMem \ W
 61 nen !  0 mfn !  61 fex !  8 pos ! 61 fin ! 173 aud !  EnVocab
 61 psi !  2 num !   0 pre !  0 seq ! 61 enx ! InStantiate

( MAN -- always masculine noun for use with gender flags )
  178 t ! 77 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ M
  179 t ! 65 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ A
  180 t ! 78 pho !   0 beg !  0 ctu ! 102 audpsi ! AudMem \ N
102 nen !  1 mfn ! 102 fex !  5 pos ! 102 fin ! 178 aud !  EnVocab
102 psi !  1 num !   0 pre !  0 seq ! 102 enx ! InStantiate

( MAYBE -- adverb response as alternative to YES or NO )
  182 t ! 77 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ M
  183 t ! 65 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ A
  184 t ! 89 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ Y
  185 t ! 66 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ B
  186 t ! 69 pho !   0 beg !  0 ctu ! 109 audpsi ! AudMem \ E
109 nen !  0 mfn ! 109 fex !  2 pos ! 109 fin ! 182 aud !  EnVocab
109 psi !  0 num !   0 pre !  0 seq ! 109 enx ! InStantiate

( MEDIA -- always plural noun in correction of modern usage )
  188 t ! 77 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ M
  189 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
  190 t ! 68 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ D
  191 t ! 73 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ I
  192 t ! 65 pho !   0 beg !  0 ctu ! 103 audpsi ! AudMem \ A
103 nen !  0 mfn ! 103 fex !  5 pos ! 103 fin ! 188 aud !  EnVocab
103 psi !  2 num !   0 pre !  0 seq ! 103 enx ! InStantiate

( MY -- for SelfReferentialThought )
  194 t ! 77 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ M
  195 t ! 89 pho !   0 beg !  0 ctu ! 94 audpsi ! AudMem \ Y
 94 nen !  0 mfn !  94 fex !  1 pos ! 76 fin ! 194 aud !  EnVocab
 94 psi !  0 num !   0 pre !  0 seq ! 94 enx ! InStantiate

( NO -- for human-computer interaction )
  197 t ! 78 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ N
  198 t ! 79 pho !   0 beg !  0 ctu ! 27 audpsi ! AudMem \ O
 27 nen !  0 mfn !  27 fex !  4 pos ! 27 fin ! 197 aud !  EnVocab
 27 psi !  0 num !   0 pre !  0 seq ! 27 enx ! InStantiate

( NOT -- for machine reasoning logic )
  200 t ! 78 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ N
  201 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  202 t ! 84 pho !   0 beg !  0 ctu ! 12 audpsi ! AudMem \ T
 12 nen !  0 mfn !  12 fex !  2 pos ! 12 fin ! 200 aud !  EnVocab
 12 psi !  0 num !   0 pre !  0 seq ! 12 enx ! InStantiate

( OF -- preposition for EnPrep module )
  204 t ! 79 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ O
  205 t ! 70 pho !   0 beg !  0 ctu ! 45 audpsi ! AudMem \ F
 45 nen !  0 mfn !  45 fex !  6 pos ! 45 fin ! 204 aud !  EnVocab
 45 psi !  0 num !   0 pre !  0 seq ! 45 enx ! InStantiate

( OR -- for machine reasoning logic )
  207 t ! 79 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ O
  208 t ! 82 pho !   0 beg !  0 ctu ! 21 audpsi ! AudMem \ R
 21 nen !  0 mfn !  21 fex !  3 pos ! 21 fin ! 207 aud !  EnVocab
 21 psi !  0 num !   0 pre !  0 seq ! 21 enx ! InStantiate

( OUR -- for SelfReferentialThought )
  210 t ! 79 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ O
  211 t ! 85 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ U
  212 t ! 82 pho !   0 beg !  0 ctu ! 81 audpsi ! AudMem \ R
 81 nen !  0 mfn !  81 fex !  1 pos ! 76 fin ! 210 aud !  EnVocab
 81 psi !  0 num !   0 pre !  0 seq ! 81 enx ! InStantiate

( PEOPLE -- establish as plural for EnParser )
  214 t ! 80 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ P
  215 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  216 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  217 t ! 80 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ P
  218 t ! 76 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ L
  219 t ! 69 pho !   0 beg !  0 ctu ! 37 audpsi ! AudMem \ E
 37 nen !  0 mfn !  37 fex !  5 pos ! 37 fin ! 214 aud !  EnVocab
 37 psi !  2 num !   0 pre !  0 seq ! 37 enx ! InStantiate

( PERSON -- for ad-hoc gender tags and robot philosophy )
  221 t ! 80 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ P
  222 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
  223 t ! 82 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ R
  224 t ! 83 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ S
  225 t ! 79 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ O
  226 t ! 78 pho !   0 beg !  0 ctu ! 104 audpsi ! AudMem \ N
104 nen !  0 mfn ! 104 fex !  5 pos ! 104 fin ! 221 aud !  EnVocab
104 psi !  1 num !   0 pre !  0 seq ! 104 enx ! InStantiate

( PLEASE -- for human-computer interaction )
  228 t ! 80 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ P
  229 t ! 76 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ L
  230 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  231 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
  232 t ! 83 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ S
  233 t ! 69 pho !   0 beg !  0 ctu ! 30 audpsi ! AudMem \ E
 30 nen !  0 mfn !  30 fex !  4 pos ! 30 fin ! 228 aud !  EnVocab
 30 psi !  0 num !   0 pre !  0 seq ! 30 enx ! InStantiate

( SHE -- high word-frequency pronoun )
  235 t ! 83 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ S
  236 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  237 t ! 69 pho !   0 beg !  0 ctu ! 80 audpsi ! AudMem \ E
 80 nen !  2 mfn !  80 fex !  7 pos ! 80 fin ! 235 aud !  EnVocab
 80 psi !  1 num !   0 pre !  0 seq ! 80 enx ! InStantiate

( SOME -- for machine reasoning logic )
  239 t ! 83 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ S
  240 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  241 t ! 77 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ M
  242 t ! 69 pho !   0 beg !  0 ctu ! 69 audpsi ! AudMem \ E
 69 nen !  0 mfn !  69 fex !  1 pos ! 69 fin ! 239 aud !  EnVocab
 69 psi !  0 num !   0 pre !  0 seq ! 69 enx ! InStantiate

( THAT -- conjunction for ConJoin module )
  244 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  245 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  246 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
  247 t ! 84 pho !   0 beg !  0 ctu ! 22 audpsi ! AudMem \ T
 22 nen !  0 mfn !  22 fex !  3 pos ! 22 fin ! 244 aud !  EnVocab
 22 psi !  0 num !   0 pre !  0 seq ! 22 enx ! InStantiate

( THE -- EnArticle highest-frequency English word )
  249 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  250 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  251 t ! 69 pho !   0 beg !  0 ctu !  7 audpsi ! AudMem \ E
  7 nen !  0 mfn !   7 fex !  1 pos !  7 fin ! 249 aud !  EnVocab
  7 psi !  0 num !   0 pre !  0 seq !  7 enx ! InStantiate

( THEIR -- high word-frequency pronoun )
  253 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  254 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  255 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  256 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  257 t ! 82 pho !   0 beg !  0 ctu ! 79 audpsi ! AudMem \ R
 79 nen !  0 mfn !  79 fex !  1 pos ! 79 fin ! 253 aud !  EnVocab
 79 psi !  0 num !   0 pre !  0 seq ! 79 enx ! InStantiate

( THEM -- high word-frequency pronoun )
  259 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  260 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  261 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  262 t ! 77 pho !   0 beg !  0 ctu ! 78 audpsi ! AudMem \ M
 78 nen !  0 mfn !  78 fex !  7 pos ! 78 fin ! 259 aud !  EnVocab
 78 psi !  2 num !   0 pre !  0 seq ! 78 enx ! InStantiate

( THEN -- for machine reasoning logic )
  264 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  265 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  266 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  267 t ! 78 pho !   0 beg !  0 ctu ! 13 audpsi ! AudMem \ N
 13 nen !  0 mfn !  13 fex !  2 pos ! 13 fin ! 264 aud !  EnVocab
 13 psi !  0 num !   0 pre !  0 seq ! 13 enx ! InStantiate

( THERE -- adverb for discussion of physical location )
  269 t ! 84 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ T
  270 t ! 72 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ H
  271 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
  272 t ! 82 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ R
  273 t ! 69 pho !   0 beg !  0 ctu ! 105 audpsi ! AudMem \ E
105 nen !  0 mfn ! 105 fex !  2 pos ! 105 fin ! 269 aud !  EnVocab
105 psi !  0 num !   0 pre !  0 seq ! 105 enx ! InStantiate

( THEY -- high word-frequency pronoun )
  275 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  276 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  277 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  278 t ! 89 pho !   0 beg !  0 ctu ! 52 audpsi ! AudMem \ Y
 52 nen !  0 mfn !  52 fex !  7 pos ! 52 fin ! 275 aud !  EnVocab
 52 psi !  2 num !   0 pre !  0 seq ! 52 enx ! InStantiate

( THINK -- germane to artificial intelligence )
  280 t ! 84 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ T
  281 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  282 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  283 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
  284 t ! 75 pho !   0 beg !  0 ctu ! 63 audpsi ! AudMem \ K
 63 nen !  0 mfn !  63 fex !  8 pos ! 63 fin ! 280 aud !  EnVocab
 63 psi !  0 num !   0 pre !  0 seq ! 63 enx ! InStantiate

( US -- for SelfReferentialThought )
  286 t ! 85 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ U
  287 t ! 83 pho !   0 beg !  0 ctu ! 77 audpsi ! AudMem \ S
 77 nen !  0 mfn !  77 fex !  7 pos ! 56 fin ! 286 aud !  EnVocab
 77 psi !  2 num !   0 pre !  0 seq ! 77 enx ! InStantiate

( WE -- for SelfReferentialThought )
  289 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  290 t ! 69 pho !   0 beg !  0 ctu ! 53 audpsi ! AudMem \ E
 53 nen !  0 mfn !  53 fex !  7 pos ! 56 fin ! 289 aud !  EnVocab
 53 psi !  2 num !   0 pre !  0 seq ! 53 enx ! InStantiate

( WHAT -- for SelfReferentialThought )
  292 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  293 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  294 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
  295 t ! 84 pho !   0 beg !  0 ctu ! 54 audpsi ! AudMem \ T
 54 nen !  3 mfn !  54 fex !  7 pos ! 54 fin ! 292 aud !  EnVocab
 54 psi !  1 num !   0 pre !  0 seq ! 54 enx ! InStantiate

( WHEN -- for SelfReferentialThought )
  297 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  298 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  299 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  300 t ! 78 pho !   0 beg !  0 ctu ! 14 audpsi ! AudMem \ N
 14 nen !  0 mfn !  14 fex !  2 pos ! 14 fin ! 297 aud !  EnVocab
 14 psi !  0 num !   0 pre !  0 seq ! 14 enx ! InStantiate

( WHERE -- for SelfReferentialThought )
  302 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  303 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  304 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  305 t ! 82 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ R
  306 t ! 69 pho !   0 beg !  0 ctu ! 15 audpsi ! AudMem \ E
 15 nen !  0 mfn !  15 fex !  2 pos ! 15 fin ! 302 aud !  EnVocab
 15 psi !  0 num !   0 pre !  0 seq ! 15 enx ! InStantiate

( WHO -- for SelfReferentialThought )
  308 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  309 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  310 t ! 79 pho !   0 beg !  0 ctu ! 55 audpsi ! AudMem \ O
 55 nen !  0 mfn !  55 fex !  7 pos ! 55 fin ! 308 aud !  EnVocab
 55 psi !  0 num !   0 pre !  0 seq ! 55 enx ! InStantiate

( WHOM -- for AI to ask grammatically correct questions )
  312 t ! 87 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ W
  313 t ! 72 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ H
  314 t ! 79 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ O
  315 t ! 77 pho !   0 beg !  0 ctu ! 106 audpsi ! AudMem \ M
106 nen !  0 mfn ! 106 fex !  7 pos ! 106 fin ! 312 aud !  EnVocab
106 psi !  0 num !   0 pre !  0 seq ! 106 enx ! InStantiate

( WHY -- for machine reasoning logic )
  317 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  318 t ! 72 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ H
  319 t ! 89 pho !   0 beg !  0 ctu ! 16 audpsi ! AudMem \ Y
 16 nen !  0 mfn !  16 fex !  2 pos ! 16 fin ! 317 aud !  EnVocab
 16 psi !  0 num !   0 pre !  0 seq ! 16 enx ! InStantiate

( WITH -- preposition for EnPrep module )
  321 t ! 87 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ W
  322 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  323 t ! 84 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ T
  324 t ! 72 pho !   0 beg !  0 ctu ! 48 audpsi ! AudMem \ H
 48 nen !  0 mfn !  48 fex !  6 pos ! 48 fin ! 321 aud !  EnVocab
 48 psi !  0 num !   0 pre !  0 seq ! 48 enx ! InStantiate

( WOMAN -- always feminine noun for use with gender flags )
  326 t ! 87 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ W
  327 t ! 79 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ O
  328 t ! 77 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ M
  329 t ! 65 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ A
  330 t ! 78 pho !   0 beg !  0 ctu ! 107 audpsi ! AudMem \ N
107 nen !  2 mfn ! 107 fex !  5 pos ! 107 fin ! 326 aud !  EnVocab
107 psi !  1 num !   0 pre !  0 seq ! 107 enx ! InStantiate

( YES -- for human-computer interaction )
  332 t !  89 pho !  1 beg !  1 ctu !  0 audpsi ! AudMem \ Y
  333 t !  69 pho !  0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  334 t !  83 pho !  0 beg !  0 ctu ! 32 audpsi ! AudMem \ S
 32 nen !   0 mfn ! 32 fex !  4 pos ! 32 fin ! 332 aud !  EnVocab
 32 psi !   0 num !  0 pre !  0 seq ! 32 enx ! InStantiate

( YOU -- for SelfReferentialThought )
  336 t ! 89 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ Y
  337 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  338 t ! 85 pho !   0 beg !  0 ctu ! 56 audpsi ! AudMem \ U
 56 nen !  0 mfn !  56 fex !  7 pos ! 50 fin ! 336 aud !  EnVocab
 56 psi !  0 num !   0 pre !  0 seq ! 56 enx ! InStantiate

( YOUR -- for SelfReferentialThought )
  340 t ! 89 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ Y
  341 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  342 t ! 85 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ U
  343 t ! 82 pho !   0 beg !  0 ctu ! 76 audpsi ! AudMem \ R
 76 nen !  0 mfn !  76 fex !  1 pos ! 94 fin ! 340 aud !  EnVocab
 76 psi !  0 num !   0 pre !  0 seq ! 76 enx ! InStantiate

( YOU -- innate response to who-am-i query )
  345 t ! 89 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ Y
  346 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  347 t ! 85 pho !   0 beg !  0 ctu ! 56 audpsi ! AudMem \ U
 56 nen !  0 mfn !  56 fex !  7 pos ! 50 fin ! 345 aud !  EnVocab
 56 psi !  0 num !   0 pre !  58 seq ! 56 enx ! InStantiate

( ARE -- essential intransitive verb -- 58 fin as of 30jul2010 )
  349 t ! 65 pho !   1 beg !   1 ctu !  0 audpsi ! AudMem \ A
  350 t ! 82 pho !   0 beg !   1 ctu !  0 audpsi ! AudMem \ R
  351 t ! 69 pho !   0 beg !   0 ctu ! 67 audpsi ! AudMem \ E
 67 nen !  0 mfn !  67 fex !   8 pos ! 58 fin ! 349 aud ! EnVocab
 58 psi !  0 num !  56 pre ! 108 seq ! 67 enx ! InStantiate

( MAGIC -- for testing purposes )
  353 t ! 77 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ M
  354 t ! 65 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ A
  355 t ! 71 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ G
  356 t ! 73 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ I
  357 t ! 67 pho !   0 beg !  0 ctu ! 108 audpsi ! AudMem \ C
108 nen !  0 mfn ! 108 fex !  5 pos ! 108 fin ! 353 aud !  EnVocab
108 psi !  0 num !  58 pre !  0 seq ! 108 enx ! InStantiate

( I -- for SelfReferentialThought )
  359 t ! 73 pho !   1 beg !  0 ctu ! 50 audpsi ! AudMem \ I
  50 nen !  0 mfn ! 50 fex !  7 pos ! 56 fin  ! 359 aud ! EnVocab
  50 psi !  1 num !   0 pre ! 58 seq ! 50 enx ! InStantiate

( AM -- for SelfReferentialThought -- 58 fin as of 30jul2010 )
  361 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
  362 t ! 77 pho !   0 beg !  0 ctu ! 57 audpsi ! AudMem \ M
 57 nen !  0 mfn !  57 fex !  8 pos ! 58 fin ! 361 aud !  EnVocab
 58 psi !  0 num !  50 pre ! 33 seq ! 57 enx ! InStantiate

( ANDRU -- for SelfReferentialThought )
  364 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
  365 t ! 78 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ N
  366 t ! 68 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ D
  367 t ! 82 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ R
  368 t ! 85 pho !   0 beg !  0 ctu ! 33 audpsi ! AudMem \ U
 33 nen !  1 mfn !  33 fex !  5 pos ! 33 fin ! 364 aud !  EnVocab
 33 psi !  1 num !  58 pre !  0 seq ! 33 enx ! InStantiate

( I -- innate KB-item for testing inhibition of idea-pairs )
  370 t ! 73 pho !   1 beg !  0 ctu ! 50 audpsi ! AudMem \ I
  50 nen !  0 mfn ! 50 fex !  7 pos ! 56 fin  ! 370 aud ! EnVocab
  50 psi !  1 num !   0 pre ! 58 seq ! 50 enx ! InStantiate

( AM -- for SelfReferentialThought -- 58 fin as of 30jul2010 )
  372 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
  373 t ! 77 pho !   0 beg !  0 ctu ! 57 audpsi ! AudMem \ M
 57 nen !  0 mfn !  57 fex !  8 pos ! 58 fin ! 372 aud !  EnVocab
 58 psi !  1 num !  50 pre ! 39 seq ! 57 enx ! InStantiate

( A -- for EnArticle module )
  375 t ! 65 pho !   1 beg !  0 ctu !  1 audpsi ! AudMem \ A
  1 nen !  0 mfn !   1 fex !   1 pos !  1 fin ! 375 aud ! EnVocab
  1 psi !  1 num !   0 pre !  39 seq !  1 enx ! InStantiate

( ROBOT -- important for target user base )
  377 t ! 82 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ R
  378 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  379 t ! 66 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ B
  380 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  381 t ! 84 pho !   0 beg !  0 ctu ! 39 audpsi ! AudMem \ T
 39 nen !  3 mfn !  39 fex !  5 pos ! 39 fin ! 377 aud !  EnVocab
 39 psi !  1 num !  58 pre !  0 seq ! 39 enx ! InStantiate

( I -- innate KB-item for testing inhibition of idea-pairs )
  383 t ! 73 pho !   1 beg !  0 ctu ! 50 audpsi ! AudMem \ I
  50 nen !  0 mfn ! 50 fex !  7 pos ! 56 fin  ! 383 aud ! EnVocab
  50 psi !  1 num !   0 pre ! 58 seq ! 50 enx ! InStantiate

( AM -- for SelfReferentialThought -- 58 fin as of 30jul2010 )
  385 t ! 65 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ A
  386 t ! 77 pho !   0 beg !  0 ctu ! 57 audpsi ! AudMem \ M
 57 nen !  0 mfn !  57 fex !  8 pos ! 58 fin ! 385 aud !  EnVocab
 58 psi !  0 num !  50 pre ! 104 seq ! 57 enx ! InStantiate

( A -- for EnArticle module )
  388 t ! 65 pho !   1 beg !  0 ctu !  1 audpsi ! AudMem \ A
  1 nen !  0 mfn !   1 fex !   1 pos !  1 fin ! 388 aud ! EnVocab
  1 psi !  1 num !   0 pre !  104 seq !  1 enx ! InStantiate

( PERSON -- for ad-hoc gender tags and robot philosophy )
  390 t ! 80 pho !   1 beg !  1 ctu !   0 audpsi ! AudMem \ P
  391 t ! 69 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ E
  392 t ! 82 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ R
  393 t ! 83 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ S
  394 t ! 79 pho !   0 beg !  1 ctu !   0 audpsi ! AudMem \ O
  395 t ! 78 pho !   0 beg !  0 ctu ! 104 audpsi ! AudMem \ N
104 nen !  0 mfn ! 104 fex !  5 pos ! 104 fin ! 390 aud !  EnVocab
104 psi !  1 num !  58 pre !  0 seq ! 104 enx ! InStantiate

( I -- for SelfReferentialThought )
  397 t ! 73 pho !   1 beg !  0 ctu ! 50 audpsi ! AudMem \ I
  50 nen !  0 mfn ! 50 fex !  7 pos ! 56 fin ! 397 aud ! EnVocab
  50 psi !  1 num !   0 pre ! 75 seq ! 50 enx ! InStantiate

( HELP -- socially significant common verb )
  399 t ! 72 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ H
  400 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  401 t ! 76 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ L
  402 t ! 80 pho !   0 beg !  0 ctu ! 75 audpsi ! AudMem \ P
  75 nen !  0 mfn ! 75 fex !  8 pos ! 75 fin ! 399 aud !  EnVocab
  75 psi !  0 num !  50 pre ! 72 seq ! 75 enx ! InStantiate

( KIDS -- noun lends itself to educational purposes )
  404 t ! 75 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ K
  405 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  406 t ! 68 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ D
  407 t ! 83 pho !   0 beg !  0 ctu ! 72 audpsi ! AudMem \ S
  72 nen !  0 mfn ! 72 fex !  5 pos ! 72 fin ! 404 aud !  EnVocab
  72 psi !  2 num ! 75 pre !  0 seq ! 72 enx ! InStantiate

( KIDS -- noun lends itself to educational purposes )
  409 t ! 75 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ K
  410 t ! 73 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ I
  411 t ! 68 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ D
  412 t ! 83 pho !   0 beg !  0 ctu ! 72 audpsi ! AudMem \ S
 72 nen !  0 mfn !  72 fex !  5 pos ! 72 fin ! 409 aud ! EnVocab
 72 psi !  2 num !   0 pre ! 73 seq ! 72 enx ! InStantiate

( MAKE -- common verb of high word-frequency )
  414 t ! 77 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ M
  415 t ! 65 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ A
  416 t ! 75 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ K
  417 t ! 69 pho !   0 beg !  0 ctu ! 73 audpsi ! AudMem \ E
 73 nen !  0 mfn !  73 fex !  8 pos ! 73 fin ! 414 aud !  EnVocab
 73 psi !  2 num !  72 pre ! 39 seq ! 73 enx ! InStantiate

( ROBOTS -- important for target user base )
  419 t ! 82 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ R
  420 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  421 t ! 66 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ B
  422 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  423 t ! 84 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ T
  424 t ! 83 pho !   0 beg !  0 ctu ! 39 audpsi ! AudMem \ S
 39 nen !  3 mfn !  39 fex !  5 pos ! 39 fin ! 419 aud !  EnVocab
 39 psi !  2 num !  73 pre !  0 seq ! 39 enx ! InStantiate

( ROBOTS -- important for target user base )
  426 t ! 82 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ R
  427 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  428 t ! 66 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ B
  429 t ! 79 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ O
  430 t ! 84 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ T
  431 t ! 83 pho !   0 beg !  0 ctu ! 39 audpsi ! AudMem \ S
 39 nen !  3 mfn !  39 fex !  5 pos ! 39 fin ! 426 aud !  EnVocab
 39 psi !  2 num !   0 pre ! 74 seq ! 39 enx ! InStantiate

( NEED -- common verb used for describing goals )
  433 t ! 78 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ N
  434 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  435 t ! 69 pho !   0 beg !  1 ctu !  0 audpsi ! AudMem \ E
  436 t ! 68 pho !   0 beg !  0 ctu ! 74 audpsi ! AudMem \ D
 74 nen !  0 mfn !  74 fex !  8 pos ! 74 fin ! 433 aud !  EnVocab
 74 psi !  2 num !  39 pre ! 65 seq ! 74 enx ! InStantiate

( ME -- for SelfReferentialThought )
  438 t ! 77 pho !   1 beg !  1 ctu !  0 audpsi ! AudMem \ M
  439 t ! 69 pho !   0 beg !  0 ctu ! 65 audpsi ! AudMem \ E
 65 nen !  0 mfn !  65 fex !  7 pos ! 56 fin ! 438 aud !  EnVocab
 65 psi !  1 num !  74 pre !  0 seq ! 65 enx ! InStantiate
( Declaration of "vault" must reflect final EnBoot "t".)
  1 t +!
    t @  vault !
    t @  tov !
  1 t +!
    t @ nlt !  ( nlt may be basis for DAMP functions )
  72 urpsi ! \ As if "KIDS" were the cresting concept.
  111 nen !  \ Adding CHESS as concept #111; 19jul2011
  5 bias !
  0 lurk !   \ prepare to auto-start thinking; 19sep2010
  0 num !
  0 mfn !  \ Prevent carry-over.
  0 mfnflag !  \ Prevent carry-over; 23aug2010
  0 nwc !
  0 pho !
  0 pre !  0 seq !
;  ( End of EnBoot English Bootstrap; return to MainLoop )


:  KbTraversal ( reactivate KB concepts )
  35 pov !
  kbtv @ 4 > IF  1 kbtv !  THEN
  CR ." Knowledge base traversal with kbtv at " kbtv @ .
  kbtv @ 1 = IF
     1 kbyn !   \ for AskUser Y/N query subject; 24jun2011
     1 recon !  \ ask "YOU" a question; 19sep2010
    56 nacpsi ! \ 56=YOU noun-activation psi; 3oct2010
    56 qusub !  \ in case a query will be made; 3oct2010
    56 subjpsi !  \ a test to help WhoBe; 7aug2010
    ." activating concept of YOU" CR \ for who-query; 7aug2010
    62 nounval !
    NounAct
    0 nacpsi !
  THEN
  kbtv @ 2 = IF
     2 kbyn !   \ for AskUser Y/N query subject; 24jun2011
    39 nacpsi !  \ 39=ROBOTS noun-activation psi; 3oct2010
    ." activating concept of ROBOTS" CR  ( 7aug2010 )
    39 qusub !  \ in case a query will be made; 3oct2010
    39 subjpsi ! \ external tagging as subject; 3oct2010
     2 nphrnum ! \ prescriptive for plural ROBOTS; 21jun2011
    62 nounval !
    NounAct
    0 nacpsi !
  THEN
  kbtv @ 3 = IF
     3 kbyn !   \ for AskUser Y/N query subject; 24jun2011
    50 nacpsi !  \ 50=I noun-activation psi; 3oct2010
    ." activating concept of I" CR     ( 7aug2010 )
    50 qusub !  \ in case a query will be made; 3oct2010
    50 subjpsi ! \ external tagging as subject; 3oct2010
  \ 62 nounval !
  \ 62 nounval ! \ Temporarily commenting out; 29jul2011
    NounAct
    0 nacpsi !
  THEN
  kbtv @ 4 = IF
     4 kbyn !   \ for AskUser Y/N query subject; 24jun2011  
   100 nacpsi ! \ 100=GOD noun-activation psi; 3oct2010
    ." activating concept of GOD" CR   ( 7aug2010 )
    100 qusub !  \ in case a query will be made; 3oct2010
    100 subjpsi ! \ external tagging as subject; 3oct2010
    62 nounval !
    NounAct
    0 nacpsi !
  THEN
  42 pov !
;  ( End of KbTraversal; return to ReJuvenate )


( http://code.google.com/p/mindforth/wiki/ReJuvenate )
:  ReJuvenate ( recycle oldest memory spaces )
  fyi @ 2 = IF
    CLS
  THEN
  0 edge !
  CR 1 rjc +!
  ." Please wait as memories migrate in ReJuvenate cycle #"
  rjc @ . CR
  t @ 2 +  coda @ vault @ +  DO
    I  jrt !
    jrt @  coda @ -  jrt !
    edge @ 1 = IF
      I 0 psi{ @  jrt @  0 psi{ !  0 I 0 psi{ !
      I 1 psi{ @  jrt @  1 psi{ !  0 I 1 psi{ !
      I 2 psi{ @  jrt @  2 psi{ !  0 I 2 psi{ !
      I 3 psi{ @  jrt @  3 psi{ !  0 I 3 psi{ !
      I 4 psi{ @  jrt @  4 psi{ !  0 I 4 psi{ !
      I 5 psi{ @  jrt @  5 psi{ !  0 I 5 psi{ !
      I 6 psi{ @  jrt @  6 psi{ !  0 I 6 psi{ !
      I 7 psi{ @  jrt @  7 psi{ !  0 I 7 psi{ !
    THEN
    edge @  1 =  IF
      en7 @  1 <  IF  0 en7 !  THEN
      I 0 en{ @  jrt @  0 en{ !  0 I 0 en{ !
      I 1 en{ @  jrt @  1 en{ !  0 I 1 en{ !
      I 2 en{ @  jrt @  2 en{ !  0 I 2 en{ !
      I 3 en{ @  jrt @  3 en{ !  0 I 3 en{ !
      I 4 en{ @  jrt @  4 en{ !  0 I 4 en{ !
      I 5 en{ @  jrt @  5 en{ !  0 I 5 en{ !
      I 6 en{ @  jrt @  6 en{ !  0 I 6 en{ !
      I 7 en{ @  en7 !
          en7 @  vault @ < IF
          en7 @  jrt @  7 en{ !  0 I 7 en{ !  THEN
          en7 @  coda @  vault @ +  > IF
          en7 @  coda @ -  jrt @ 7 en{ !
          THEN               0 I 7 en{ !
    THEN
    edge @  1 = IF
      I 0 aud{ @  jrt @  0 aud{ !
      I 1 aud{ @  jrt @  1 aud{ !
      I 2 aud{ @  jrt @  2 aud{ !
      I 3 aud{ @  jrt @  3 aud{ !
      I 4 aud{ @  jrt @  4 aud{ !
      I 5 aud{ @  jrt @  5 aud{ !
        fyi @ 1 > IF
                  jrt @  0 aud{ @ EMIT
        THEN
    THEN
    edge @ 0 = IF
     32 jrt @ 0 aud{ !
      0 jrt @ 1 aud{ !
            I 2 aud{ @ 123 = IF  1 edge !  THEN
      0 jrt @ 2 aud{ !
      0 jrt @ 3 aud{ !
      0 jrt @ 4 aud{ !
      0 jrt @ 5 aud{ !
      0 jrt @ 0 en{ !
      0 jrt @ 1 en{ !
      0 jrt @ 2 en{ !
      0 jrt @ 3 en{ !
      0 jrt @ 4 en{ !
      0 jrt @ 5 en{ !
      0 jrt @ 6 en{ !
      0 jrt @ 7 en{ !
      0 jrt @ 0 psi{ !
      0 jrt @ 1 psi{ !
      0 jrt @ 2 psi{ !
      0 jrt @ 3 psi{ !
      0 jrt @ 4 psi{ !
      0 jrt @ 5 psi{ !
      0 jrt @ 6 psi{ !
      0 jrt @ 7 psi{ !
    THEN
  LOOP
  jrt @  t !
  cns @    t @  DO
   32  I 0  aud{ !
    0  I 1  aud{ !
    0  I 2  aud{ !
    0  I 3  aud{ !
    0  I 4  aud{ !
    0  I 5  aud{ !
    0  I 0   en{ !
    0  I 1   en{ !
    0  I 2   en{ !
    0  I 3   en{ !
    0  I 4   en{ !
    0  I 5   en{ !
    0  I 6   en{ !
    0  I 7   en{ !
    0  I 0  psi{ !
    0  I 1  psi{ !
    0  I 2  psi{ !
    0  I 3  psi{ !
    0  I 4  psi{ !
    0  I 5  psi{ !
    0  I 6  psi{ !
    0  I 7  psi{ !
  LOOP
  t @ 32 - tov !  \ 12jan2010 Avoid truncating thoughts.
  CR CR ." End of ReJuvenate #" rjc @ .
  ." in the AI Mind display for science museum exhibits."
  CR ." Tab key cycles through Normal, Transcript, "
   ." Tutorial, Diagnostic display-modes. "  CR
  1 kbtv +!
  kbtv @ 0 > IF
    CR ." For lack of human input, "
    ." ReJuvenate calls KbTraversal" CR
    KbTraversal
  THEN
  rsvp @ rjc @ - rsvp !
  rsvp @ 2 < IF 2 rsvp ! THEN  \ 23dec2009 Maintain speed.
;  ( End of ReJuvenate )


:  SpeechAct ( output of a word as text or sound )
  aud @ 0 = IF 1 aud ! THEN \ default to ERROR; 21jul2011
  fyi @ 2 = IF CR THEN
  0 audstop !   ( Initially false value of flag )
  0 pho !       ( Lest pho already be at 32 )
  aud @ onset !  ( onset of a word is its recall-vector )
  aud @ t2s !
  40  1  DO
    t2s @  0  aud{ @ pho !
    pho @ 32 = NOT IF
      pho @ EMIT  ( say or display "pho" )
      pho @ lastpho !
    THEN   \ End of test for pho=32 space-bar; 30aug2010 
    pho @ 32 = IF  \ but instead of a blank space; 30aug2010
      lastpho @ 83 = NOT IF \ not after "S"; 30aug2010
        inflex1 @ 0 > IF  \ 30aug2010
          inflex1 @ pho !  \ 30aug2010
          0 inflex1 !  \ reset for safety; 30aug2010
        THEN  \  30aug2010
        1 spacegap !
        0 vpos !
      THEN  \ End of test for previous "S"; 30aug2010
      pho @ EMIT  ( say or display "pho" )
      1 audstop !
    THEN  \ end of test for 32=space; 30aug2010
    35 pov !  ( internal point-of-view "#" like mindgrid )
    AudInput  ( for reentry of thought back into a mind )
    audstop @ 1 = IF
      spacegap @ 1 = IF
        32 pho !
        1 audrun ! \ resetting at end of internal word.
        AudInput
        0 spacegap !
      THEN
      LEAVE
    THEN
    t2s @  1+  t2s !
    t2s @  4 aud{ @ 0 = IF 32 pho ! THEN ( If end of word )
    match @ 1 = IF
      0 match !
      LEAVE
    THEN
  LOOP
  0 match !
  0 obstat !
;  ( End of SpeechAct )


:  SayYes ( to utter "YES" in response )
  midway @  t @  DO
    I       0 en{ @  32 = IF
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct
  0 kbquiz !
  0 yesorno !
;  ( End of SayYes )


:  EnArticle ( select "a" or "the" before a noun )
  nphrpos @ 7 = NOT IF
    nphrnum @  1 = IF
      motjuste @ ghost @ = NOT IF
       indefartcon @  1 = IF  \ from WHAT-query; 16apr2011
        anset @ 0 = IF ( If no vowel is next )
          midway @  t @  DO
            I       0 en{ @  1 = IF  \ If #1 "A" is found,
              I     7 en{ @  aud !
              LEAVE
            THEN
          -1 +LOOP
        THEN  ( End of test for absence of a vowel )
        anset @ 0 > IF  ( If anset-flag is positive )
          midway @  t @  DO
            I       0 en{ @ 83 = IF  \ If #83 "AN" is found,
              I     7 en{ @  aud !
              LEAVE
            THEN
          -1 +LOOP
        THEN  ( End of test for a vowel coming next )
        1 numflag ! \ With "A" assume singular number.
        SpeechAct
        0 indefartcon !  \ Reset; 16apr2011
       THEN  \ End of test for positive indefartcon; 16apr2011
      THEN
      motjuste @ ghost @ = IF
       defartcon @  1 = IF  \ from WH0-query; 16apr2011
        midway @  t @  DO
          I       0 en{ @  7 = IF  \ If "THE" is found; 16apr2011
            I     7 en{ @  aud !
            LEAVE
          THEN
        -1 +LOOP
        SpeechAct
        0 defartcon !  \ Reset; 16apr2011 
       THEN  \ End of test for positive defartcon; 16apr2011
      THEN
    THEN
  THEN
  nphrpos @ 7 = NOT IF
    nphrnum @  2 = IF
      midway @  t @  DO
        I       0 en{ @  7 = IF  \ If "THE" is found; 16apr2011
          I     7 en{ @  aud !
          LEAVE
        THEN
      -1 +LOOP
      SpeechAct
    THEN
  THEN
  dirobj @ 1 = IF
    motjuste @ ghost !
  THEN
;  ( End of EnArticle; return to NounPhrase )


:  AuxVerb ( auviliary Verb )
  subjnum @ 1 =  prsn @ 3 = AND IF  \ 19jul211
    midway @  t @  DO
      I       0 en{ @  87 = IF  \ 87=DOES 13jun2011
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct  \ Say word starting at "aud" value; 20jul2011
    87 urpsi !    \ 13jun2011
    51 caller !
    PsiDamp
    0 caller !
  ELSE  \ all other cases except 3rd prsn sing; 25jun2011
    midway @  t @  DO
      I       0 en{ @  59 = IF  \ 59=DO; 25jun2011
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct
    fyi @ 2 > IF CR
      ."   from AuxVerb after speaking of DO, "
      ." psiDamping concept #59 DO"
    THEN
    59 urpsi !
    51 caller !
    PsiDamp
    0 caller !
  THEN  \ end of test for both sing & 3rd prsn; 25jun2011
;  ( End of AuxVerb; return to SelfRef or WhatAuxSDo or AskUser )


:  WhatAuxSVerb ( What DO Subjects Verb; 13jun2011 )
  PsiDecay
  midway @  t @  DO
    I       0 en{ @  54 = IF  \ 54=WHAT  13jun2011
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct  \ Say word starting at "aud" value; 20jul2011
  54 urpsi !
  PsiDamp
  AuxVerb  \ Say DOES or DO depending on num(ber) 20jul2011
  0 motjuste !
  midway @  t @  DO
    I       0 en{ @  topic @ = IF  \ 13jun2011
      I     7 en{ @ aud !
      LEAVE
    THEN
  -1 +LOOP
  topic @ urpsi !  \ 14aug2011
  PsiDamp
  SpeechAct
  verbpsi @ 0 = IF 59 verbpsi ! THEN  \ 59=DO DeFault; 5aug2011
  midway @  t @  DO
    I       0 en{ @  verbpsi @ = IF  \ 13jun2011
      I     2 en{ @  2 = IF  \ as if infinitive; 13jun2011
        I     7 en{ @  aud !
        LEAVE
      THEN  \ End of test for plural as if infinitive
    THEN
  -1 +LOOP
  aud @ 0 = IF  \ if no plural accept singular 14aug2011
    midway @  t @  DO  \ search English vocab; 14aug2011
      I       0 en{ @  verbpsi @ = IF  \ 14aug2011
        I   7 en{ @  aud !  \ for SpeechAct; 14aug2011
        LEAVE  \ one engram is enough; 14aug2011
      THEN  \ end of test for verbpsi; 14aug2011
    -1 +LOOP   \ end of backwards search loop; 14aug2011
  THEN  \ end of test for no engram found; 14aug2011
  SpeechAct
  verbpsi @ urpsi !  \ 13jun2011
  PsiDamp
  PsiDecay
;  ( End of WhatAuxSVerb; first created 13jun2011 )


:  WhatAuxSDo ( What DO Subjects DO )
  PsiDecay
  midway @  t @  DO
    I       0 en{ @  54 = IF  \ 54=WHAT; 14aug2011
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct
  54 urpsi !
  42 caller !
  PsiDamp
  0 caller !
  AuxVerb   \ to include DO or DOES; 14aug2011
  midway @  t @  DO
    I       0 en{ @  topic @ = IF
      I     7 en{ @ aud !
      LEAVE
    THEN
  -1 +LOOP
  topic @ urpsi !   \ 14aug2011
  42 caller !
  PsiDamp
  SpeechAct
  midway @  t @  DO
    I       0 en{ @  59 = IF  \ 59=DO; 14aug2011
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct
  fyi @ 2 > IF CR
    ."   from whatAuxSDo after speaking of DO, "
    ." psiDamping concept #59 DO"
  THEN
  59 urpsi !
  42 caller !
  PsiDamp
  0 caller !
  PsiDecay
;  ( End of WhatAuxSDo; orphaned from AskUser; 9aug2010 )


:  WhoBe  ( for asking WHO IS-AM-ARE; 9aug2010 )
  topic @ 0 > IF topic @ qusub ! THEN  \ review; 30jul2011
  subjpsi @ 0 > IF subjpsi @ qusub ! THEN  \ 30jul2011
  midway @  t @  DO  \ Say the word "WHO"; 19aug2010
    I       0 en{ @  55 = IF  ( 55=WHO; 9aug2010 )
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct
  8766 caller !  \ ASCII 87=W 66=B; test; 26sep2010
  55 urpsi !  \ Designate concept to be psi-damped; 19aug2010
  PsiDamp
  0 caller !  \ reset after use; 26sep2010
  qusub @ 50 = IF 1 prsn ! THEN \ 1st person "I"  4oct2010
  qusub @ 53 = IF 1 prsn ! THEN \ 1st person WE   4oct2010
  qusub @ 56 = IF 2 prsn ! THEN \ 2nd person YOU  4oct2010
  qusub @ 49 = IF 3 prsn ! THEN \ 3rd person HE   4oct2010
  qusub @ 80 = IF 3 prsn ! THEN \ 3rd person SHE  4oct2010
  qusub @ 95 = IF 3 prsn ! THEN \ 3rd person IT   4oct2010
  qusub @ 52 = IF 3 prsn ! THEN \ 3rd person THEY 1sep2010
  prsn @ 3 = IF  \ only for 3rd person; 1sep2010
    midway @  t @  DO  \ Say "IS" after "WHO"; 19aug2010
      I       0 en{ @  66 = IF  ( 66=IS )
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct   \ to say "IS"; 17aug2010
    0 mfn !  \ test; remove; 25aug2010
    0 mfnflag ! \ Reset after use; 19aug2010
  THEN  \ end of test for prsn=1; 1sep2010
  qusub @ 50 = IF  ( I; 4oct2010 )
    1 prsn !  \ first person; 1sep2010
    1 nphrnum !  \ singular; 1sep2010
    midway @  t @  DO
      I       0 en{ @  57 = IF   ( 57=AM )
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
  THEN    \ 9aug2010
  qusub @ 65 = IF  \ treat 65=ME like 50=I; 4oct2010
    midway @  t @  DO
      I       0 en{ @  57 = IF   ( 57=AM )
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct  \ moved inside the IF-clause; 10aug2010
  THEN    \ 9aug2010
  qusub @ 56 = IF  ( YOU; 4oct2010 )
    2 prsn !  \ second person; 1sep2010
    midway @  t @  DO
      I       0 en{ @  67 = IF  ( 67=ARE )
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct   \ to say "ARE"; 10aug2010
  THEN    \ 9aug2010
  qusub @ 49 = IF  ( HE; 4oct2010 )
    3 prsn !  \ third person; 1sep2010
    1 nphrnum !  \ singular; 1sep2010
    midway @  t @  DO
      I       0 en{ @  66 = IF  ( 66=IS )
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
  THEN    \ 10aug2010
  midway @  t @  DO  \ search for who-query subject; 23aug2010
  \ I       0 en{ @  subjpsi @ = IF  \ 23aug2010
    I       0 en{ @  qusub @ = IF  \ if qusub found; 3oct2010
      I     7 en{ @  aud !  \ recall-tag; 23aug2010
      LEAVE   \ one exemplar is enough; 23aug2010
    THEN   \ end of test for subject; 23aug2010
  -1 +LOOP  \ end of search-loop; 23aug2010
  SpeechAct  \ speak (WHO IS) qusub query-subject; 3oct2010
  0 recon !  \ Reset for safety; 25aug2010
;  \ End of WhoBe; return to VerbPhrase; 30jul2011


:  WhatBe ( what IS/ARE Subjects ) \ 25feb2011
  subjpsi @ 56 = IF 2 prsn ! THEN  \ 2nd person YOU; 19sep2010
  PsiDecay
  midway @  t @  DO
    I       0 en{ @  54 = IF
      54 motjuste !
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct
  fyi @ 2 > IF CR
    ."   from WhatBe after speaking of WHAT, "  \ 25feb2011
    ." psiDamping concept #54"
  THEN
  8773 caller !  \ ASCII 87=W 73=I; test; 26sep2010
  54 urpsi !
  PsiDamp
  0 caller !
  topicnum @ 2 = NOT IF
   prsn @ 3 = IF  \ 3rd person singular; 19sep2010
    midway @  t @  DO
      I       0 en{ @  66 = IF
        66 motjuste !  \ "IS"; 19sep2010
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct
    fyi @ 2 > IF CR
      ."   from WhatBe after speaking of IS, " \ 25feb2011
      ." psiDamping concept #66"
    THEN
    8773 caller !  \ ASCII 87=W 73=I; test; 26sep2010    
    66 urpsi !
    PsiDamp
    0 caller !
    0 motjuste !
   THEN  \ end of test for 3rd person singular; 19sep2010
  THEN
  topicnum @ 2 =  prsn @ 2 =  OR IF  \ test; 19sep2010
    midway @  t @  DO
      I       0 en{ @  67 = IF
        67 motjuste !    \ "ARE"; 19sep2010
        I     7 en{ @  aud !
        LEAVE
      THEN
    -1 +LOOP
    SpeechAct
    fyi @ 2 > IF CR
      ."   from WhatBe after speaking of ARE, " \ 25feb2011
      ." psiDamping concept #67"
    THEN
    8773 caller !  \ ASCII 87=W 73=I; test; 26sep2010
    67 urpsi !
    PsiDamp
    0 caller !  \ test; 26sep2010
    0 motjuste !
    0 topicnum !
  THEN
  topicnum @ 2 = NOT IF  \ if singular; 21jun2011
    prsn @ 3 = IF  \ 3rd person singular; 21jun2011
      EnArticle  \ chance for "A" or "THE"; 21jun2011
    THEN   \ end of test for 3rd person; 21jun2011
  THEN   \ end of test for singular; 21jun2011
 topic @ subjpsi @ = IF  \ 19sep2010
  midway @  t @  DO
    I       0 en{ @  topic @ = IF
      I     7 en{ @ aud !
      LEAVE
    THEN
  -1 +LOOP
  motjuste @ urpsi !
  8773 caller !  \ ASCII 87=W 73=I; test; 26sep2010
  PsiDamp
  0 caller !  \ test; 26sep2010
 THEN  \ 19sep2010 
  aud @ 0 > IF  \ avoid #zero ERROR; \ 19sep2010
    SpeechAct
  THEN  \ end of test to avoid ERROR; 19sep2010
  PsiDecay
  0 isflag !    \ 11dec2009 For sake of SelfRef
  0 areflag !   \ 11dec2009 For sake of SelfRef
  0 unkflag !   \ 11dec2009 For sake of SelfRef
;  ( End of WhatBe; return to AskUser; 25feb2011 )


( http://code.google.com/p/mindforth/wiki/AskUser )
:  AskUser  ( outputs questions of a speculative nature )
  kbyn  @ 0 = IF  \ insurance; 24jun2011
    39 qusub !    \ start with ROBOTS; 24jun2011
     3 prsn !     \ third person; 24jun2011
     2 numsubj !  \ plural; 24jun2011
     2 putnum !   \ plural for InStantiate; test; 5aug2011
     2 subjnum !  \ plural; 21jul2011
  THEN  \ end of test for no query-subject 24jun2011 
  ynverb @ 0 = IF  \ only ask y/n question once; 24jun2011
   quverb @ ynverb !  \ isolate at start; 24jun2022
   nphrnum @ 2 = IF  \ if plural trigger; test; 24jun2011
    kbyn @ 1 = IF  \ from KbTraversal; 24jun2011
      56 qusub !  \ 56=YOU for yes-or-no query 24jun2011
       2 prsn !     \ YOU is second person; 24jun2011
       1 numsubj !  \ assume YOU is singular; 24jun2011
       1 subjnum !  \ assume YOU is singular; 21jul2011
    THEN  \ end of test for KbTraversal; 24jun2011
    kbyn @ 2 = IF  \ from KbTraversal; 24jun2011
     39 qusub !  \ use ROBOTS as a test item; 24jun2011
      3 prsn !     \ third person; 24jun2011
      2 numsubj !  \ plural; 24jun2011
      2 subjnum !  \ plural; 21jul2011
    THEN  \ end of test for KbTraversal; 24jun2011
    kbyn @ 3 = IF  \ from KbTraversal; 24jun2011
      50 qusub !  \ 50=I for yes-or-no query 24jun2011
       1 prsn !     \ I is first person; 24jun2011
       1 numsubj !  \ since I is singular; 24jun2011
       1 subjnum !  \ since "I" is singular; 21jul2011
    THEN  \ end of test for KbTraversal; 24jun2011
    kbyn @ 4 = IF  \ from KbTraversal; 24jun2011
     100 qusub !  \ 100=GOD for yes-or-no query 24jun2011
       3 prsn !     \ GOD is third person; 24jun2011
       1 numsubj !  \ GOD is singular; 24jun2011
       1 subjnum !  \ GOD is singular; 21jul2011 
    THEN  \ end of test for KbTraversal; 24jun2011
     AuxVerb       \ to say DO or DOES; 24jun2011
     midway @  t @  DO  \ search English vocab; 24jun2011
       I       0 en{ @  qusub @ = IF  ( kbtv )
         I     7 en{ @  aud !
         LEAVE
       THEN
     -1 +LOOP
     SpeechAct   \ to say the subject; 24jun2011
     t @ tkbn !  \ if engram is to be changed; 2jul2011
     qusub @ nacpsi !  \ transfer activand; 25jun2011
     62 nounval !  \ prime NounAct; 24jun2011
     NounAct  \ activate the query subject; 24jun2011 
     midway @  t @  DO  \ search English vocab; 24jun2011
       I       0 en{ @  ynverb @ = IF  ( yes-or-no verb )
         I     2 en{ @  2 = IF  \ as if infinitive; 24jun2011
           I   7 en{ @  aud !  \ fetch recall-vector
           LEAVE  \ one engram is enough; 24jun2011
         THEN  \ end of test for plural as if infinitive
       THEN
     -1 +LOOP
     aud @ 0 = IF  \ if no plural accept singular 24jun2011
       midway @  t @  DO  \ search English vocab; 24jun2011
         I       0 en{ @  ynverb @ = IF  ( yes-or-no verb )
           I     2 en{ @  1 = IF  \ second choice; 24jun2011
             I   7 en{ @  aud !  \ fetch recall-vector
             LEAVE  \ one engram is enough; 24jun2011
           THEN  \ end of test for plural as if infinitive
         THEN
       -1 +LOOP
     THEN  \ end of test for no engram found; 24jun2011
   ( insert call to VerbAct for sake of quasi-NegSvo )
     ynverb @ nacpsi !  \ transfer activand; 25jun2011
     62 verbval !  \ prime VerbAct;  2jul2011
     VerbAct  \ activate the query verb; 25jun2011
     SpeechAct   \ to say yes-or-no verb; 24jun2011
     t @ 1 - tkbv !  \ if engram is to be changed; 2jul2011
     quobj @ 0 = IF  \ if no query-object; 20jul2011
       110 quobj !  \ 110=ANYTHING by default; 20jul2011
     THEN  \ end of test for a query-object; 20jul2011
     midway @  t @  DO  \ search English vocab; 24jun2011
       I       0 en{ @  quobj @ = IF  ( query-object? )
         I     7 en{ @  aud !
         LEAVE
       THEN
     -1 +LOOP
     SpeechAct   \ to say query-object; 24jun2011
   THEN  \  end of test for a plural nphrnum; 24jun2011
   0 yncon !  \ because question has been asked;  2jul2011
   1 kbcon !  \ because waiting for answer;  2jul2011
   0 ynverb !  \ zero out; prevent repeat of query 24jun2011
  THEN  \ end of test for a positive ynverb; 24jun2011
   0 recon ! 
   0 isflag !    \ 10dec2009 Prevent pseudo-isflag.
   0 areflag !   \ 11dec2009 Prevent pseudo-areflag.
   5 bias !  \ Restore expectation of noun; 24jun2011
;  ( End of AskUser; return to EnCog or BeVerb )


\ The SelfRef module aims for the following entelechy goals:
\ [ ] It shall enable the AI to think of "you and I" as "we".
\ [ ] It shall decide correctly the use of "I" or "ME".
\ 4aug2011 Special Note: The "I dunno" function of SelfRef
\ is becoming obsolete, to be replaced by a DeFault mechanism
\ when KbSearch does not yield a yes-answer or a "No" answer.
:  SelfRef  ( 3dec2009 self-reference with pronouns )
  subjectflag @ 0 = IF  \ 29dec2009 Prevent spurious NOT-KNOW
    isflag @   areflag @  OR  1 =   IF \ 11dec2009
      \ We insert a "{" for the sake of ReJuvenate.
      123  t @  2 aud{ !  \  123 is ASCII bracket "{"
      t @ tov !  \ 12jan2010 "{" marks start of thought.
      midway @  t @  DO  \ Look backwards for 50=I.
        I       0 en{ @  50 = IF  \ If #50 "I" is found,
          50 motjuste !  \ "nen" concept #50 for "I".
          I     7 en{ @  aud !  \ Recall-vector for "I".
          LEAVE  \ Use the most recent engram of "I".
        THEN  \ End of search for #50 "I".
      -1 +LOOP  \ End of loop finding the word "I".
      SpeechAct   \ 7dec2009 Speak or display the word "I".
      AuxVerb   \ Fetch a form of auxiliary verb "do".
      midway @  t @  DO  \ Look backwards for 12=not.
        I       0 en{ @  12 = IF  \ If #12 "not" is found,
          12 motjuste !  \ "nen" concept #12 for "not".
          I     7 en{ @  aud !  \ Recall-vector for "not".
          LEAVE  \ Use the most recent engram of "not".
        THEN  \ End of search for #12 "not".
      -1 +LOOP  \ End of loop finding the word "not".
      SpeechAct   \ 7dec2009 Speak or display the word "not".
      midway @  t @  DO  \ Look backwards for 61=KNOW.
        I       0 en{ @  61 = IF  \ If #61 "KNOW" is found,
          61 motjuste !  \ "nen" concept #61 for "KNOW".
          I     7 en{ @  aud !  \ Recall-vector for "KNOW".
          LEAVE  \ Use the most recent engram of "not".
        THEN  \ End of search for #61 "KNOW".
      -1 +LOOP  \ End of loop finding the word "KNOW".
      SpeechAct   \ 7dec2009 Speak or display the word "KNOW".
    THEN    \ 7dec2009 End of test for isflag from EnCog
  THEN \ 29dec2009 End of test of subjectflag
  subjectflag @ 3 < IF  \ Accept ANY value of flag.
    ( We insert a "{" for the sake of Rejuvenate. )
    123  t @  2 aud{ !  \  123 is ASCII bracket "{"
    t @ tov !  \ 12jan2010 "{" marks start of thought.
    midway @  t @  DO  \ Look backwards for 50=I.
      I       0 en{ @  50 = IF  \ If #50 "I" is found,
              50 motjuste !  \ "nen" concept #50 for "I".
        I     7 en{ @  aud ! \ Recall-vector for "I".
        LEAVE  \ Use the most recent engram of "I".
      THEN  \ End of search for #50 "I".
    -1 +LOOP  \ End of loop finding the word "I".
    SpeechAct \ 13dec2009 Speak or display the word "I".
    AuxVerb   \ Fetch a form of auxiliary verb "do".
    midway @  t @  DO  \ Look backwards for 12=not.
      I       0 en{ @  12 = IF  \ If #12 "not" is found,
        12 motjuste !  \ "nen" concept #12 for "not".
        I     7 en{ @  aud !  \ Recall-vector for "not".
        LEAVE  \ Use the most recent engram of "not".
      THEN  \ End of search for #12 "not".
    -1 +LOOP  \ End of loop finding the word "not".
    SpeechAct \ 13dec2009 Speak or display the word "not".
    midway @  t @  DO  \ Look backwards for 61=KNOW.
      I       0 en{ @  61 = IF  \ If #61 "KNOW" is found,
        61 motjuste !  \ "nen" concept #61 for "KNOW".
        I     7 en{ @  aud ! \ Recall-vector for "KNOW".
        LEAVE  \ Use the most recent engram of "not".
      THEN  \ End of search for #61 "KNOW".
    -1 +LOOP  \ End of loop finding the word "KNOW".
    SpeechAct \ 13dec2009 Speak or display the word "KNOW".
  THEN \ 29dec2009 End of test of subjectflag
  subjectflag @ 1 = IF  ( 3dec2009 NounPhrase seeks a subject )
    motjuste @ 65 = IF  ( 3dec2009 If candidate is 65=ME )
      50 motjuste !  ( 32dec2009 Change 65=ME to 50=I )
      \ Activate auditory engram of pronoun "I":
      midway @  t @  DO  \ Look backwards for 50=I.
        I       0 en{ @  50 = IF  \ If #50 "I" is found,
          50 motjuste !  \ "nen" concept #50 for "I".
          I     7 en{ @  aud ! \ Recall-vector for "I".
          LEAVE  \ Use the most recent engram of "I".
        THEN  \ End of search for #50 "I".
      -1 +LOOP  \ End of loop finding pronoun "I".
      motjuste @ psi ! \ For use in NounAct module.
      motjuste @ nacpsi !  \  1jan2010 Needed in NounAct
      62 nounval !  \  8jan2010 test; remove
      NounAct          \ For slosh-over to related concept.
      SpeechAct        \ To say or display the pronoun
    THEN  ( 3dec2009 End of test for candidate 65=ME )
    0 subjectflag !  \ 29dec2009 test; remove
  THEN  ( 3dec2009 End of test for NounPhrase seeking a subject )
  1 sknlp !  \ 8jn2010 Skip NLP generation in EnCog.
;  \ End of SelfRef; return to NounPhrase or EnCog


:  EnPronoun  \ For use with what-do-X-do queries.
  num @ 1 = IF  \ If antecedent num(ber) is singular.
    mfn @ 1 = IF  \ if masculine singular; 13apr2010
      midway @  t @  DO  \ Look backwards for 49=HE.
        I       0 en{ @  49 = IF  \ If #49 "he" is found,
          49 motjuste !  \ "nen" concept #49 for "he".
          I     7 en{ @  aud !  \ Recall-vector for "he".
          LEAVE  \ Use the most recent engram of "he".
        THEN  \ End of search for #49 "he".
      -1 +LOOP  \ End of loop finding pronoun "he".
      SpeechAct \ Speak or display the pronoun "he".
    THEN  \ end of test for masculine gender-flag.
    mfn @ 2 = IF  \ if feminine singular.
      midway @  t @  DO  \ Look backwards for 80=SHE
        I       0 en{ @  80 = IF  \ If #80 "she" is found,
          80 motjuste !  \ "nen" concept #80 for "she".
          I     7 en{ @  aud !  \ Recall-vector for "she".
          LEAVE  \ Use the most recent engram of "she".
        THEN  \ End of search for #80 "she".
      -1 +LOOP  \ End of loop finding pronoun "she"
      SpeechAct \ Speak or display the pronoun "she"
    THEN  \ end of test for feminine gender-flag.
    mfn @ 3 = IF  \ if neuter singular; 13apr2010
      midway @  t @  DO  \ Look backwards for 95=IT.
        I       0 en{ @  95 = IF  \ If #95 "it" is found,
          95 motjuste !  \ "nen" concept #95 for "it".
          I     7 en{ @  aud !  \ Recall-vector for "it".
          LEAVE  \ Use the most recent engram of "it".
        THEN  \ End of search for #95 "it"; 13apr2010
      -1 +LOOP  \ End of loop finding pronoun "it".
      SpeechAct \ Speak or display the pronoun "it".
    THEN  \ end of test for neuter gender-flag.
    0 numsubj !  \ safety measure; 13apr2010
  THEN  \ End of test for singular num(ber)
  num @ 2 = IF  \ 30dec2009 If num(ber) of antecedent is plural
    ( code further conditions for "WE" or "YOU" )
    midway @  t @  DO  \ Look backwards for 52=THEY.
      I       0 en{ @  52 = IF  \ If #52 "they" is found,
        52 motjuste !  \ "nen" concept #52 for "they".
        I     7 en{ @  aud !  \ Recall-vector for "they".
        LEAVE  \ Use the most recent engram of "they".
      THEN  \ End of search for #52 "they".
    -1 +LOOP  \ End of loop finding pronoun "they".
    SpeechAct \ Speak or display the pronoun "they".
  THEN  \ 30dec2009 End of test for plural num(ber)
;  ( End of EnPronoun; return to EnCog or to NounPhrase )


\ Noun-selection shifts from En{ to Psi{ on 12aug2011.
:  NounPhrase ( select part of a thought )
  PsiDecay  \ reduce stray activations; 17aug2011
  66 caller !  \ here and further down; 12oct2010
  objold @ urpsi !  \ here and further down; 12oct2010
  0 caller !  \ reset after use; 12oct2010
  0 urpsi !  \ reset for safety; 12oct2010
  0 reject !
  EnReify ( move abstract Psi concepts to EnVocab reality )
  0 act !
  0 aud !
  0 kibosh !  \ for de-activating non-selectees; 17aug2011  
  0 motjuste !
  0 num !   \ without prejudice; 29aug2010
  0 prsn !  \ without prejudice; 29aug2010
  5 opt !
  35 pov !
  1 subjectflag !  ( 3dec2009 A default until countermanded )
  dirobj @ 1 = IF 0 subjectflag ! THEN  ( 3dec2009 anti-default )
  predflag @ 1 = IF 0 subjectflag ! THEN ( anti-default 8oct2010 )  
  0 psi !
  midway @  t @  DO
    I 5 psi{ @ 5 =  I 5 psi{ @ 7 = OR IF  \ POS; 12aug2011
      \ SHOW ALL POSITIVE ACTIVATIONS; test; 15aug2011
    \ I    1 psi{ @ 0 > IF  \ test; remove; 18aug2011
    \ CR ." NPhrA: I psi0 psi1 = "  \ test 18aug2011
    \ I . I 0 psi{ @ .  I 1 psi{ @ .  \ test 18aug2011
    \ THEN  \ test; remove; 18aug2011
      I   0 en{ @ 65 = IF I 7 en{ @ audme ! THEN  \ 25jul2010
      I  1 psi{ @  act @ > IF  \ if higher; 12aug2011
        subjectflag @ 1 = IF  \ 28jul2011
          I        tsels ! \ retain time of subject;  28jul2011
        THEN  \ end of test for selection of subject  28jul2011
        I          tseln ! \ retain time of motjuste;  8may2011
        tseln @  kibosh @  < IF  \ if different; 17aug2011
        \ ."  KIBOSH = " kibosh @ .  \ 18aug2011
          0 kibosh @ 1 psi{ !  \ deactivate also-ran; 17aug2011
        THEN  \ 17aug2011
        I         kibosh ! \ time of predecessor cand 17aug2011
        I  0 psi{ @  motjuste !  \ 12aug2011
        ( insert NPhr diagnostic code here; 11aug2011 )
      \ CR ."  NPhr: I kibosh motjuste psi1 = "  \ test 18aug2011
      \ I . kibosh @ . motjuste @ . I 1 psi{ @ . \ test 18aug2011
        alsoran @ 0 > IF  \ if there is an alsoran; 5nov2010
          motjuste @ alsoran @ = NOT IF  \ superseded? 5nov2010
            alsoran @ urpsi !  \ prepare to psi-damp; 5nov2010
            0 urpsi !  \ reset for safety; 5nov2010
            0 alsoran !  \ reset for safety; 5nov2010
          THEN  \ end of test for higher-act motjuste; 5nov2010
        THEN  \ end of test for postive alsoran; 5nov2010
        \ Code below may obviate need for alsoran code; 9nov2010
     \  I     1 en{ @ 5 > IF  \ above arbitrary 5?  9nov2010
     \    I   1 en{ @  act @ < IF  \ non-winner?  9nov2020
     \      I 0 en{ @  urpsi !  \ prepare to psi-damp; 9nov2010
     \      0 urpsi !  \ reset for safety;  9nov2010
     \    THEN   \ end of test for non-winner;  9nov2010
     \  THEN  \ end of test for positive activation; 9nov2010
        motjuste @ alsoran !  \ in case higher is found; 5nov2010
        subjectflag @ 1 = IF  \ avoid direct objects; 3oct2010
         I 2 psi{ @ subjnum !  \ verbs in general; 12aug2011
          motjuste @ subjold !  \ keep oldsubject ready; 8oct
        THEN  \ end of test for a thought-subject; 3oct2010
       I 0 psi{ @  subjpsi !  \ 12aug2011
       I 2 psi{ @  nphrnum !  \ NounPhrase num(ber); 12aug2011
       I 2 psi{ @  putnum !   \ putative num for verb; 12aug2011
       I 5 psi{ @  nphrpos !  \ NounPhrase part-of-speech 12aug2011
       I 5 psi{ @  posflag ! ( AskUser discriminand; 12aug2011 )
        I 7 en{ @  aud !      \ 31jan2010
        I 7 en{ @  audjuste ! \ 31jan2010
        dirobj @ 1 = IF
          motjuste @ objold ! \ a test ICW slosh-over; 12oct2010
          motjuste @  50 = IF
            fyi @ 3 = IF
              CR ." nPhr: Switching dirobj I to ME"  CR
            THEN
            65 motjuste !
            audme @ aud !
            audme @ audjuste !
          THEN
        THEN
       I 1 psi{ @  act !  \ 12aug2011
      THEN
    THEN
  -1 +LOOP
  midway @  t @  DO  \ search backwards; 12aug2011
    I       0 en{ @  motjuste @ = IF  \ 12aug2011
      I     7 en{ @  aud !  \ auditory recall-vector; 12aug2011
      I     7 en{ @  audjuste !  \ recall-vector; 12aug2011
      LEAVE  \ one auditory engram is enough; 12aug2011
    THEN   \ end of test for match with motjuste; 12aug2011
  -1 +LOOP  \ end of backwards search loop; 12aug2011
  dirobj @ 1 = IF  \ When seeking direct object; 13jun2011
    act @  20 < IF  \ If activation too low; 13jun2011
      WhatAuxSVerb  \ ask question for lack of dirobj 30jul2011
      EXIT  \ Abandon rest of NounPhrase; 13jun2011
    THEN  \ End of test for sufficient activation; 13jun2011
  THEN  \ End of test for direct object; 13jun2011
  act @  8 < IF  \ if no subject of thought is found; 16aug2011
    50 motjuste !  \ 50=I default concept of AI Mind; 16aug2011
    50 subjpsi !   \ for use elsewhere; 16aug2011
    50 topic !     \ for question-asking modules; 16aug2011
     1 subjnum !   \ for use elsewhere; 16aug2011
     1 prsn !      \ for use elsewhere; 16aug2011
    midway @  t @  DO  \ Look backwards for 50=I; 16aug2011
      I       0 en{ @  50 = IF  \ If #50 "I" is found; 16aug2011
        I     7 en{ @  aud !  \ Recall-vector for "I"; 16aug2011
        LEAVE  \ Use the most recent engram of "I"; 16aug2011
      THEN  \ End of search for #50 "I"; 16aug2011
    -1 +LOOP  \ End of loop finding the word "I"; 16aug2011
    SpeechAct   \ Speak or display the word "I". 16aug2011
    EXIT  \ Abandon rest of NounPhrase; 16aug2011
  THEN  \ end of test for low activation warranting a default
  act @  20 < IF  \ if winning activation too low; 28sep2010
    midway @  t @  DO   \ search for WHAT; test; 4aug2011
      I       0 en{ @  54 = IF   \ test;  4aug2011
        54 motjuste !            \ test;  4aug2011
        1 subjnum !              \ test; 14aug2011
        I     7 en{ @  aud !     \ test;  4aug2011
        LEAVE                    \ test;  4aug2011
      THEN                       \ test;  4aug2011
    -1 +LOOP                     \ test;  4aug2011
    SpeechAct  \ say "WHAT"; test; 4aug2011
    EXIT  \ Abandon rest of NounPhrase; 4aug2011
  THEN  \ end of threshold-test to reject subject; 28sep2010
  motjuste @ 50 = IF  \ if 50=I selected; 29aug2010
    1 prsn !  \ first person; 29aug2010
    1 num !   \ singular; 29aug2010
    1 nphrnum !  \ singular; 30aug2010
  THEN  \ end of test for 50=I; 29aug2010
  subjpsi @ 0 > IF  \ if positive subjpsi; 26jul2010
    whomark @ 0 > IF  \ if positive from InSt; 26jul2010
      subjpsi @ qutop !  \ xfer value; 26jul2010
      0 whomark !  \ reset after single use; 26jul2010
    THEN  \ end of test for positive whomark; 26jul2010
  THEN  \ end of test for positive subjpsi; 26jul2010
  EnDamp
  subjectflag @ 1 = IF  \ 3dec2009 If seeking a subject...
    motjuste @ 65 = IF SelfRef EXIT  THEN  \ Pronoun "ME"
  THEN   \ 3dec2009 End of test for positive subjectflag
  act @ nounval !
  dirobj @ 1 = IF  \ 13dec2009 Only if seeking direct object
    motjuste @ 0 > IF  \ 13dec2009 If a candidate is found
    THEN    \ 13dec2009 End of test for a positive candidate.
  THEN  \ 13dec2009 End of test for seeking a direct object.
  act @ 2 < IF
    motjuste @ 0 > IF
      1 reject !
    THEN
  THEN
  motjuste @  hipsi !
  0 anset !   ( Insert "AN" article before vowels. )
  aud @  0  aud{ @ 65 = IF 65 anset ! THEN  ( if vowel A )
  aud @  0  aud{ @ 69 = IF 69 anset ! THEN  ( if vowel E )
  aud @  0  aud{ @ 73 = IF 73 anset ! THEN  ( if vowel I )
  aud @  0  aud{ @ 79 = IF 79 anset ! THEN  ( if vowel O )
  aud @  0  aud{ @ 85 = IF 85 anset ! THEN  ( if vowel U )
  whoflag @ 0 = IF  \ If not answering a who-is query; 23jul2010
  \ EnArticle    \ Give a chance, not an order; 23jul2010
  \ EnArticle    \ Commenting out; inhibition test; 9sep2010
    0 whoflag !  \ Here instead of at InStantiate; 23jul2010
  THEN  \ End of test for zero whoflag; 23jul2010
  num @ 1 = IF  \ If num(ber is singular; 10ap2010
    EnPronoun   \ Prepare to substitute he she it; 10apr2010
  THEN   \ End of test of num(ber); 10apr2010
  motjuste @ 50 = NOT IF  \ if not 50=I; 29aug2010
    motjuste @ 56 = NOT IF  \ not 56=you; 29aug2010
      motjuste @ 53 = NOT IF  \ 56=WE; 29aug2010
        3 prsn !  \ not I YOU WE; 29aug2010
      THEN  \ end of test for 53=WE; 29aug2010
    THEN  \ end of test for 56=YOU; 29aug2010
  THEN  \ end of test for "not I" 29aug2010
  motjuste @ nacpsi !
  ( could use "subjectflag" for test below; 18oct2010 )
  dirobj @ 0 = IF  \ only let subjects call NounAct; 17oct2010
    NounAct
  THEN  \ end of test originating in JavaScript AI; 17oct2010
  0 nacpsi !
  0 nounval !
  66 caller !  \ test; 26sep2010
  motjuste @ urpsi !  \ test; 17oct2010
  PsiDamp  \ to prevent interference; 17oct2010
  0 caller !  \ reset after use; 26sep2010
  0 urpsi !  \ reset for safety; 24sep2010
  66 caller !  \ test; 12oct2010
  objold @ urpsi !  \ test; 12oct2010
  0 caller !  \ reset after use; 12oct2010
  0 urpsi !  \ reset for safety; 12oct2010
\ -64 tsels @  1 psi{ ! \ ICW be-verb ActRules; 29jul2011
  -32 tsels @  1 psi{ ! \ AI is now robust enough; 5aug2011
\ predflag @ 1 = IF  \ omit dir-obj for now; 22sep2010
  predflag @ 1 = dirobj @ 1 = OR IF  \ test; 29may2011
    NounClear  \ deactivate before inhibiting; 18aug2011
  \ -32 tseln @  1 psi{ ! \ a hefty inhibition; 8may2011
  \ -64 tseln @  1 psi{ ! \ for response-variety; 29may2011
    -32 tseln @  1 psi{ ! \ AI is now robust enough; 5aug2011
    PsiDecay  \ try to knock out also-rans; 8nov2010
    PsiDecay  \ try to knock out also-rans; 8nov2010
  THEN  \ only inhibit predicate nominatives; 11sep2010
  predflag @ 1 = IF  \ helps for Is-a; 15sep2010
    EnArticle  \ say "A" or "THE"; 15sep2010
  THEN  \ end of test; 15sep2010
  audjuste @ aud !
  aud @ 0 > IF  \ avoid ERROR; 19sep2010
    SpeechAct
  THEN   \ end of test for 0=aud ERROR; 19sep2010 
  predflag @ 1 = dirobj @ 1 = OR IF  \ both; 23jun2011
    -32 t @ 1 -  1 psi{ ! \ inhibit new noun-node; 27sep2010
  \ -64 t @      1 psi{ ! \ test; revert; 25jun2011
    -32 t @      1 psi{ ! \ AI is now robust enough; 5aug2011
  THEN  \ only inhibit predicate nominatives; 12sep2010
\ -64 t @        1 psi{ !  \ also inhibit subjects; 28jul2011
  -32 t @        1 psi{ !  \ AI is now robust enough; 5aug2011
  32 EMIT
  fyi @ 2 > IF CR
  ."   from NounPhrase "
  THEN
  motjuste @ topic !
  instnum @  topicnum !
  dirobj @ 1 = predflag @ 1 = OR IF  \ if set; 24sep2010
    66 caller !  \ test; 26seo2010
    motjuste @ urpsi !  \ prepare to psi-damp motjuste; 24sep
    PsiDamp  \ knock down activation of non-subject; 24sep2010
    0 caller !  \ test; 26sep2010
    0 urpsi !  \ reset for safety; 24sep2010
  THEN \ end of test for a non-subject (pro)noun; 24sep2010
  0 act !
  0 alsoran !  \ reset for safety; 5nov2010
  0 psi  !
  0 aftjux !  \ reset for safety; 27jul2011
  0 prejux !  \ reset for safety; 27jul2011
  0 jux !     \ reset for safety; 27jul2011
  0 psi3 !    \ reset for safety  27jul2011
;  ( NounPhrase returns to BeVerb, VerbPhrase, or EnCog )


:  ConJoin
  questype @  16 =  IF
    18     conj !
  ELSE  17 conj !
  THEN
  midway @  t @  DO
    I       0 en{ @  conj @ = IF
      conj @  motjuste !
      I     7 en{ @  aud !
      LEAVE
    THEN
  -1 +LOOP
  SpeechAct
  0 questype !
;  ( End of ConJoin; return to an English generation module )


:  BeVerb ( intransitive verbs of being )
  \ BeVerb is being repatriated into VerbPhrase; 8aug2011
     maxbeact @ 21 < IF  \ tighten up; test; 28sep2010
     6 maxbeact +!  \ test, REMOVE; 25aug2010
       AskUser   \ locus for reactive code? 9aug2010
       0 posflag !  \ reset for safety; 9aug2010     \
       0 detour !   \ test, remove; 10aig2010
       400 rsvp !   \ Give user time to respond. 10aug2010
       EXIT  \ avoid callling NounPhrase again; 10aug2010
     THEN  \ end of test of activation; 8aug2010
     0 beact !  \ reset after any usage; 8aug2010
     0 maxbeact !  \ reset; 19aug2010
   nphrnum @ 1 = IF  ( If number is singular; 20sep2010 )
     prsn @ 1 = IF  \ 1st person singular; 20sep2010
       midway @  t @  DO
         I       0 en{ @  57 = IF  \ 20sep2010
           57 motjuste !  ( Set verbform to "AM" 20sep2010 )
           I     7 en{ @  aud ! ( Start of AM-engram )
           LEAVE
         THEN
       -1 +LOOP
     THEN  \ end of test for first person; 20sep2010
     prsn @ 3 = IF  \ 3rd person singular; 20sep2010
       midway @  t @  DO
         I       0 en{ @  66 = IF
           66 motjuste !  ( 4dec2009 Set verbform to "IS" )
           I     7 en{ @  aud ! ( Start of IS-engram )
           LEAVE
         THEN
       -1 +LOOP
     THEN  \ end of test for third person; 20sep2010
   THEN ( 4dec2009 Pronoun-tests below may override these values )
 \ num @ 2 = IF  ( 4dec2009 if number is plural )
   nphrnum @ 2 = IF  ( if number is plural; 20sep2010 )
       midway @  t @  DO
         I       0 en{ @  67 = IF
           67 motjuste !  ( 4dec2009 Set verbform to "ARE" )
           I     7 en{ @  aud !  ( Start of ARE-engram )
           LEAVE
         THEN
       -1 +LOOP
   THEN  ( Pronoun-tests below may override these values. )
   numflag @ 1 = IF  ( If EnArticle "A" has set singular )
 \ CR ."    BeVerb IS w. numflag " numflag @ . \ 20sep2010
       midway @  t @  DO
         I       0 en{ @  66 = IF
           66 motjuste !   ( 66 = IS )
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
   THEN
   subjpsi @ 50 = IF  ( I )
     motjuste @ 57 = NOT IF  ( AM )
       midway @  t @  DO
         I       0 en{ @  57 = IF
           57 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   subjpsi @ 56 = IF  ( YOU )
     motjuste @ 67 = NOT IF   ( ARE )
       midway @  t @  DO
         I       0 en{ @  67 = IF
           67 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   subjpsi @ 49 = IF  ( HE )
     motjuste @ 66 = NOT IF  ( IS )
       midway @  t @  DO
         I       0 en{ @  66 = IF
           66 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   subjpsi @ 80 = IF  ( SHE )
     motjuste @ 66 = NOT IF   ( IS )
       midway @  t @  DO
         I       0 en{ @  66 = IF
           66 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   subjpsi @ 95 = IF  ( IT )
     motjuste @ 66 = NOT IF  ( IS )
       midway @  t @  DO
         I       0 en{ @  66 = IF
           66 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   subjpsi @ 53 = IF  ( WE )
     motjuste @ 67 = NOT IF  ( ARE )
       midway @  t @  DO
         I       0 en{ @  67 = IF
           67 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   subjpsi @ 52 = IF  ( THEY )
     motjuste @ 67 = NOT IF    ( ARE)
       midway @  t @  DO
         I       0 en{ @  67 = IF
           67 motjuste !
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP
     THEN
   THEN
   posflag @ 5 = IF  ( for a noun; 20aug2010 )
     nphrnum @ 1 = IF  \ for singular noun; 20sep2010
       midway @  t @  DO
         I       0 en{ @  66 = IF
           66 motjuste !   ( 66 = IS )
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP  \ end of search for "IS"; 20sep2010
     THEN  \ end of test for singular; 20sep2010
     nphrnum @ 2 = IF  \ for plural noun; 20sep2010
       midway @  t @  DO
         I       0 en{ @  67 = IF  \ 20sep2010
           67 motjuste !   ( 67 = ARE; 20sep2010 )
           I     7 en{ @  aud !
           LEAVE
         THEN
       -1 +LOOP  \ end of search for "ARE"; 20sep2010
     THEN  \ end of test for plural; 20sep2010
     subjpsi @ qus !  \ transfer to query-subject; 20aug2010
     0 qus !  \ reset, if safe; 20aug2010
   THEN  \ taking number into consideration; 20sep2010
   0 subjpsi !  \  1jan2010 Assuming use of it has been made.
   motjuste @ vacpsi !  \ prepare to deglobalize; 27sep2010
   VerbAct
   0 vacpsi !  \ reset for safety; 27sep2010
   motjuste @ 57 = IF  \ 57=AM; test; 8oct2010
   ( It may be necessary to activate 58=BE unconditionally. )
     58 vacpsi !  \ 58=BE; in case stored as such; 8oct2010
     VerbAct  \ activate not only AM but also BE; 8oct2010
     0 vacpsi  \ reset for safety; 8oct2010
   THEN  \ end of test to equate AM & BE; 8oct2010
   motjuste @ 67 = IF  \ 67=ARE; test; 9oct2010
   ( It may be necessary to activate 58=BE unconditionally. )
     58 vacpsi !  \ 58=BE; in case stored as such; 9oct2010
     VerbAct  \ activate not only ARE but also BE; 9oct2010
     0 vacpsi  \ reset for safety; 9oct2010
   THEN  \ end of test to equate ARE & BE; 9oct2010
   \ more than one be-verb may need psi-damping;  9nov2010
 \ -64 tsels @ 1 psi{ ! \ Inhibit subj after thinking; 28jul2011
   -32 tsels @ 1 psi{ ! \ AI is now robust enough; 5aug2011
 \ -64 tselv @ 1 psi{ ! \ Inhibit verb after thinking; 28jul2011
   -32 tselv @ 1 psi{ ! \ AI is now robust enough; 5aug2011
   0 tsels !  \ reset for safety; 28jul2011
   0 tselv !  \ reset for safety; 28jul2011
   motjuste @ urpsi !  \ prepare to psi-damp;  9nov2010
   PsiDamp  \ deactivate the be-verb form;  9nov2010
   0 urpsi !  \ reset for safety;  9nov2010
   SpeechAct
 \ -64 t @ 1 -   1 psi{ ! \ inhibit current be-verb; 28jul2011
   -32 t @ 1 -   1 psi{ ! \ AI is now robust enough; 5aug2011
   1 predflag !  \ briefly set the flag; test; 11sep2010
   notjux @ 12 = IF  \ 12=NOT; 11aug2011
     midway @  t @  DO   \ Search En(glish) array; 27jul2011
       I       0 en{ @  12 = IF  \ Look for "NOT"; 27jul2011
         I     7 en{ @  aud ! \ Auditory start-tag 27jul2011
         LEAVE   \ One instance of NOT suffices; 27jul2011
       THEN   \ End of lexical test for 12=NOT; 27jul2011
     -1 +LOOP  \ End of loop searching for 12=NOT; 27jul2011
     SpeechAct  \ Say the word "NOT"; 27jul2011
     0 aftjux !  \ reset for safety; 27jul2011
     0 notjux !  \ reset for safety; 11aug2011
     0 prejux !  \ reset for safety; 27jul2011
     0 jux !     \ reset for safety; 27jul2011
     0 psi3 !    \ reset for safety  27jul2011
   THEN \ end of test for negated be-verb; 27jul2011
 ( EnAdjective -- a possibility here )
   NounPhrase
   0 predflag !  \ reset for safety; test; 11sep2010
  0 numflag !  \  3dec2009 VerbPhrase also resets numflag.
;  \ 7dec2009  BeVerb returns to VerbPhrase or...


\ The VerbPhrase module aims for the following entelechy goals.
\ [ ] If no predicate nominative is known, detour into a question.
\ [ ] If no transitive verb is most active, default to verb of being.
\ [ ] If no direct object is found, detour into asking a question.
\ 7dec2009 If no verb is found for a noun, defer to SelfRef NOT-KNOW.
\ [ ] If a transitive verb is most active, try to find direct object.
\ [X] Find whatever verb is most active after a noun-phrase.
\ Verb-selection shifts from en{ array to psi{ array on 12aug2011.
:  VerbPhrase ( supervise verb syntax )
  PsiDecay  \ reduce stray activations; 17aug2011
  0 subjectflag !  \ for only absolute SpreadAct; test; 4aug2011 
  EnReify
  0 act !
  0 aud !
  0 detour !
  0 kibosh !  \ for de-activating non-selectees; 17aug2011
  0 motjuste !
  8 opt !
  0 psi !
  0 vphract !  \ for validity of threshold-tests; 15aug2011
  adverbact 32 > IF
    ( EnAdverb )
  THEN
  fyi @ 1 > IF CR
 ."   VerbPhrase preview with slosh-over indicated by + --"
    CR 
    ."   Disparate verb-node activations slosh "  \ 7nov2010
    ." over onto candidate objects."  CR  ."    " \ 7nov2010
  THEN
  midway @ t  @ DO
    I     5 psi{ @  8 = IF  \  if 8=pos verb; 12aug2011
    \ SHOW ALL POSITIVE ACTIVATIONS; test; remove; 15aug2011
    \ I    1 psi{ @ 0 > IF  \ test; remove; 18aug2011
    \ CR ." VPhrA: I psi0 psi1 = "  \ test 18aug2011
    \ I . I 0 psi{ @ .  I 1 psi{ @ .  \ test 18aug2011
    \ THEN  \ test; remove;  17aug2011
      I   1 psi{ @  act @ > IF  ( if psi1 is higher 12aug2011 )
        I          tselv ! \ retain time of winning verb; 8may2011
        tselv @  kibosh @  < IF  \ if different 17aug2011
        \ ."  KIBOSH = " kibosh @ .  \ 17aug2011
          0 kibosh @ 1 psi{ !  \ deactivate also-ran; 17aug2011
        THEN  \ end of comparison; 17aug2011
        I         kibosh ! \ time of predecessor cand 17aug2011
        I 0 psi{ @ motjuste !  ( store psi-tag of verb 12aug2011 )
        ( insert diagnostic code here; 7aug2011 )
      \ CR ."  VPhrB: I motjuste psi1 tselv = "  \ 18aug2011
      \ I . motjuste @ .  I 1 psi{ @ . tselv @ . \ 18aug2011
        I 1 psi{ @ beact ! ( store activation of be-verb; 12aug2011 )
        maxbeact @ beact @ < IF  \ if maximum is smaller; 20aug2010
          beact @ maxbeact !  \ for comparisons; 20aug2010
        THEN  \ only store when beact is large; 20aug2010
   I 1 psi{ @ 0 > IF  \ positive activation; 12aug2011
        I 3 psi{ @ psi3 !  ( Check for negation; 25jun2011 )
        I 3 psi{ @ notjux !  ( check be-verb negation; 11aug2011 )
   THEN  \ end of test for positive activation; 27jul2011
        I 5 psi{ @ predpos ! ( Grab winning part of speech 12aug2011 )
        I  7 en{ @ vphraud ! ( auditory recall-vector 25jun2011 )
        I 1 psi{ @  act !  ( to test for a higher psi1 12aug2011 )
      THEN
    THEN
  -1 +LOOP
  act @ vphract !  \ for threshold comparisons; 21jun2011
  motjuste @ unk !  \ test; 8aug2011
  unk @ 57 = unk @ 58 = OR unk @ 66 = OR unk @ 67 = OR IF
  \ CR ." VPhr: be-verb notjux = "  \ test; 11aug2011
  \ unk @ .  notjux @ . \ test; 11aug2011
  THEN  \ end of test for BE AM IS ARE; 8aug2011
  act @  verbval !
  0 psi !
  fyi @ 2 > IF
    CR ."  VerbPhrase: motjuste = " motjuste @ .
    ." going into SPEECH."
    CR ."  VerbPhrase: aud = " aud @ .
    ." going into SPEECH."
  THEN
  motjuste @ 0 = IF
    nphrnum @ 1 = IF  \ 21jun2011
      mfnflag @ 0 > IF  \ if masc. or fem.; 30jul2011
        WhoBe  \ ask WHO not WHAT; 30jul2011
        0 mfnflag !  \ reset after use; 30jul2011
        EXIT  \ abandon rest of VerbPhrase
      THEN  \ end of test for positive mfnflag; 30jul2011
      WhatBe  \ for a what-is question; test; 21jun2011
      EXIT  \ abandon rest of VerbPhrase;  2jul2011
    THEN  \ 21jun2011
    nphrnum @ 2 = IF  \  2jul2011
      WhatAuxSDo  \ what do Subjects do? 2jul2011
      1 yncon !  \ after input ask yes-or-no question
      EXIT  \ abandon rest of VerbPhrase;  2jul2011
    THEN  \ end of test for plural noun; 2jul2011
    1 detour !
    fyi @ 1 > IF
      CR ."   VerbPhrase: detouring when "
      ." no candidate-verb is found. "
      CR ."   VerbPhrase: detour value is at " detour @ .
    THEN
  THEN
\ CR ."  VPhrBranch:: motjuste nphrnum vphract = " \ 15aug2011
\ motjuste @ .  nphrnum @ . vphract @ .  \ test; 15aug2011
  motjuste @ 0 > IF
    vphract @ 20 < IF  \ a test ICW WhoBe; 21jun2011
      nphrnum @ 1 = IF  \ 21jun2011
        mfnflag @ 0 > IF  \ if masc. or fem.; 30jul2011
          WhoBe  \ ask WHO not WHAT; 30jul2011
          0 mfnflag !  \ reset after use; 30jul2011
          EXIT  \ abandon rest of VerbPhrase
        THEN  \ end of test for positive mfnflag; 30jul2011
        WhatBe  \ for a what-is question; test; 21jun2011
        EXIT  \ abandon rest of VerbPhrase; 30jul2011
      THEN  \ 21jun2011
      nphrnum @ 2 = IF  \  2jul2011
        WhatAuxSDo  \ what do Subjects do? 2jul2011
        1 yncon !  \ after input ask yes-or-no question
        EXIT  \ abandon rest of VerbPhrase;  2jul2011
      ELSE  \ if "nphrnum" neither 1 nor 2; 15aug2011
        EXIT  \ to avoid a spurious thought; 15aug2011
      THEN  \ end of test for plural noun; 2jul2011
    THEN   \ End of test of vphract; 21jun2011
    psi3 @ 12 = IF  \ test; 25jun2011
     motjuste @ unk !  \ test; 6aug2011
     unk @ 57 = unk @ 58 = OR unk @ 66 = OR unk @ 67 = OR NOT IF
      AuxVerb   \ to say "DO" or "DOES" 25jun2011
      midway @  t @  DO   \ Search En(glish) array; 25jun2011
        I       0 en{ @  12 = IF  \ Look for "NOT"; 25jun2011
          I     7 en{ @  aud ! \ Auditory start-tag 25jun2011
          LEAVE   \ One instance of NOT suffices; 25jun2011
        THEN   \ End of lexical test for 12=NOT; 25jun2011
      -1 +LOOP  \ End of loop searching for 12=NOT; 25jun2011
      SpeechAct  \ Say the word "NOT"; 25jun2011
      0 psi3 !  \ reset for safety; 27jul2011
     THEN  \ end of test to not say do w. be-verbs; 28jul2011
    THEN  \ end of test for psi3 jux negation; 25jun2011
    motjuste @ unk !  \ convenience; 14aug2011
    unk @ 57 = unk @ 58 = OR unk @ 66 = OR unk @ 67 = OR NOT IF
      nphrnum @ 1 = IF  \ 14aug2011
        prsn @ 3 = IF  \ Only for third person;  8may2011
          83 inflex1 !  \ for inflex1,2,3 (ing); 3nov2010
          1 vpos !  \ 14aug2011
        THEN \ End of test for 3rd person (sing) 8may2011
      THEN  \ end of test fof singular; 14aug2011
    THEN  \ end of test for not a be-verb; 14aug2011
    motjuste @  hipsi !
    \ The following code for the irregular English verb
    \ "to have" serves as example code for the many German
    \ irregular verbs that a polyglot AI must deal with.
    motjuste @ 70 = IF  \ irregular 70=HAVE; 13aug2011
      subjnum @ 1 =  prsn @ 3 = AND IF  \ 13aug2011
        midway @  t @  DO  \ search backwards; 13aug2011
          I       0 en{ @  90 = IF  \ 90=HAS;  13aug2011
            I     7 en{ @  vphraud !  \ 13aug2011
            LEAVE  \ one engram is enough; 13aug2011
          THEN  \ end of test for HAS-engram; 13aug2011
        -1 +LOOP  \ end of search of En(glish) lexicon
      THEN  \  end of test for 3rd person singular; 13aug2011
    THEN  \ end of special handling of 70=HAVE; 13aug2011
    motjuste @ unk !  \ use short "unk" to save room; 8ug2011
    unk @ 57 = unk @ 58 = OR unk @ 66 = OR unk @ 67 = OR IF
      subjnum @ 1 = IF  \ singular subject number; 16aug2011
        prsn @ 1 = IF   \ first person; 16aug2011
          midway @  t @  DO  \ search En-lexicon; 16aug2011
            I       0 en{ @  57 = IF  \ 57=AM; 16aug2011
              I     7 en{ @  vphraud !  \ engram; 16aug2011
              LEAVE  \ one engram is enough; 16aug2011
            THEN  \ end of test for 57=AM; 16aug2011
          -1 +LOOP  \ end of loop; 16aug2011
        THEN  \ end of test for first person; 16aug2011
        prsn @ 2 = IF   \ singular or plural; 16aug2011
          midway @  t @  DO  \ search En-lexicon; 16aug2011
            I       0 en{ @  67 = IF  \ 67=ARE; 16aug2011
              I     7 en{ @  vphraud !  \ engram; 16aug2011
              LEAVE  \ one engram is enough; 16aug2011
            THEN  \ end of test for 67=ARE; 16aug2011
          -1 +LOOP  \ end of loop; 16aug2011
        THEN  \ end of test for second person; 16aug2011
        prsn @ 3 = IF  \ third person; 16aug2011
          midway @  t @  DO  \ search En-lexicon; 16aug2011
            I       0 en{ @  66 = IF  \ 66=IS; 16aug2011
              I     7 en{ @  vphraud !  \ engram; 16aug2011
              LEAVE  \ one engram is enough; 16aug2011
            THEN  \ end of test for 66=IS; 16aug2011
          -1 +LOOP  \ end of loop; 16aug2011
        THEN  \ end of test for third person; 16aug2011
      THEN  \ end of test for singular; 16aug2011
      subjnum @ 2 = IF  \ if plural subject; 16aug2011
        midway @  t @  DO  \ search En-lexicon; 16aug2011
          I       0 en{ @  67 = IF  \ 67=ARE; 16aug2011
            I     7 en{ @  vphraud !  \ engram; 16aug2011
            LEAVE  \ one engram is enough; 16aug2011
          THEN  \ end of test for 67=ARE; 16aug2011
        -1 +LOOP  \ end of loop; 16aug2011
      THEN  \ end of test for plural number; 16aug2011
    THEN  \ end of two-step be-verb substitution; 16aug2011
    motjuste @ 58 = IF  \  12aug2011
      subjpsi @ 50 = IF  \ 50=I; 12aug2011
        midway @  t @  DO  \ search En(glish) array; 21aug2011
          I       0 en{ @  57 = IF  \ 57=AM; 12aug2011
            57 motjuste !  ( Set verbform to "AM" 20sep2010 )
            57 urpsi !  ( parameter for PsiDamp 14aug2011 )
            I     7 en{ @  vphraud ! \ for SpeechAct 12aug2011
            LEAVE  \ finding recent "AM" is enough; 12aug2011
          THEN  \ end of two-step test to say "AM"; 12aug2011
        -1 +LOOP  \ end of backwards loop; 12aug2011
      THEN  \ end of test for "50=I" subject-psi; 12aug2011
      subjpsi @ 56 = IF  ( YOU )          \ 8aug2011
        midway @  t @  DO               \ 8aug2011
          I    0 en{ @  67 = IF    \ 67=ARE 8aug2011
            I  7 en{ @  vphraud !  \ 8aug2011
            LEAVE                     \ 8aug2011
          THEN                        \ 8aug2011
        -1 +LOOP                      \ 8aug2011
      THEN  \ 8aug2011
    THEN  \  end of test for 58=BE; 13aug2011
    motjuste @ 67 = IF  \ 67=ARE; 11aug2011
      subjpsi @ 50 = IF  \ 50=I; 11aug2011
        midway @  t @  DO  \ search En(glish) array; 11aug2011
          I       0 en{ @  57 = IF  \ 57=AM; 11aug2011
            57 motjuste !  ( Set verbform to "AM" 20sep2010 )
            I     7 en{ @  vphraud ! \ for SpeechAct 11aug2011
            LEAVE  \ finding recent "AM" is enough; 11aug2011
          THEN  \ end of two-step test to say "AM"; 11aug2011
        -1 +LOOP  \ end of backwards loop; 11aug2011
      THEN  \ end of test for "50=I" subject-psi; 11aug2011
    THEN  \ end of test for be-verb 67=ARE; 11aug2011
    motjuste @ 58 = IF  \ shift from BE; 27aug2010
      num @ 1 = IF  \ singular; 27aug2010
        prsn @ 1 = IF  \ if first person; 29aug2010
          midway @  t @  DO  \ search backwards in time
            I       0 en{ @  57 = IF \ recent 57=AM; 12sep2010
              I     7 en{ @  aud !  \ get recall-vector
              LEAVE  \ after finding recent "AM"; 29aug2010
            THEN     \ end of test for 67=AM; 29aug2010
          -1 +LOOP \ end of retrieval loop for "AM"; 29aug2010
          0 prsn !  \ reset after use; 29aug2010
        THEN  \ end of test for 1st person sing; 29aug2010
        prsn @ 3 = IF  \ if third person; 12sep2010
          midway @  t @  DO  \ search backwards in time
            I       0 en{ @  66 = IF \ most recent instance
              66 motjuste ! ( 66=IS; 27aug2010 )
              I     7 en{ @  aud !  \ get recall-vector
              LEAVE  \ after finding recent "IS"; 28aug2010
            THEN     \ end of test for 66=IS; 27aug2010
          -1 +LOOP \ end of retrieval loop for "IS"; 27aug2010
        THEN  \ end of test for 3rd person sing; 12sep2010
      THEN  \ end of test for singular; 27aug2010
      ( following code covers undeclared plurals; 27aug2010 )
      num @ 1 = NOT IF  \ other than singular; 27aug2010
        midway @  t @  DO  \ search backwards in time
          I       0 en{ @  67 = IF  \ most recent instance
            67 motjuste ! ( 67=ARE; 27aug2010 )
            I     7 en{ @  aud !  \ get recall-vector
            LEAVE  \ after finding recent "ARE"; 27aug2010
          THEN     \ end of test for 67=ARE; 27aug2010
        -1 +LOOP \ end of retrieval loop for "ARE"; 27aug2010
      THEN  \ end of test for not singular; 27aug2010
    THEN  \ end of test for 58=BE; 27aug2010
    0 subjectflag !  \ for SpreadAct slosh-over; 18oct2010
  \ motjuste @ psi !
    motjuste @ vacpsi !  \ prepare to deglobalize; 27sep2010
    motjuste @ verbpsi !  \ for WhatAuxSVerb; 13jun2011
    VerbAct
    0 vacpsi !  \ reset for safety; 27sep2010
    nphrnum @ 2 = NOT IF  \ if not plural; test; 30aug2010
      1 nphrnum !  \ default to singular; test; 30aug2010
    THEN  \ end of test for plural nphrnum; 30aug2010
    prsn @ 3 = IF  \ 3rd person? 29aug2010
      nphrnum @ 1 = IF  \ test; 30aug2010
      83 inflex1 !  \ xfer to SpeechAct; 30aug2010
      THEN  \ end of test for singular nphrnum; 30aug2010
    THEN  \ end of test for 3rd person; 29aug2010
    vphraud @ aud !  \ transfer just before call; 25jun2011
    SpeechAct  ( main call from VerbPhrase to SpeechAct )
      VerbClear  \ deactivate before inhibiting; 17aug2011
      -48 t @ 1 -  1 psi{ ! \ inhibit new verb-node; 8may2011
      -48 t @      1 psi{ ! \ inhibit new verb-node; 7may2011
      0 inflex1 !  \ test; 30aug2010
      0 vphraud !  \ reset for safety; 25jun2011
      0 vpos !
    motjuste @ unk !  \ use short "unk" to save room; 8ug2011
    unk @ 57 = unk @ 58 = OR unk @ 66 = OR unk @ 67 = OR IF
      notjux @ 12 = IF  \ 12=NOT; OR aftjux? 11aug2011
        midway @  t @  DO   \ Search En(glish) array; 27jul2011
          I       0 en{ @  12 = IF  \ Look for "NOT"; 27jul2011
            I     7 en{ @  aud ! \ Auditory start-tag 27jul2011
            LEAVE   \ One instance of NOT suffices; 27jul2011
          THEN   \ End of lexical test for 12=NOT; 27jul2011
        -1 +LOOP  \ End of loop searching for 12=NOT; 27jul2011
        SpeechAct  \ Say the word "NOT"; 27jul2011
        0 aftjux !  \ reset for safety; 27jul2011
        0 notjux !  \ reset for safety; 12aug2011
        0 prejux !  \ reset for safety; 27jul2011
        0 jux !     \ reset for safety; 27jul2011
        0 psi3 !    \ reset for safety; 27jul2011
      THEN \ end of test for negated be-verb; 27jul2011
    THEN  \ end of test for be-verb; 27jul2011
  THEN  \ end of test for positive motjuste; 29aug2010
  10 act !
  motjuste @  urpsi !
  62 caller !
  PsiDamp  \ Necessary for chain of thought; 24oct2010
  0 caller !
  EnDamp
  \ Following lines inhibit old KB verb-node; 13jun2011
\ -32 tselv @ 1 psi{ ! \ To avoid spurious NOT; 12aug2011
  -64 tselv @ 1 psi{ ! \ Prevent spurious thoughts; 16aug2011
  0 tselv ! \ Reset tselv after use; 13jun2011
  32 EMIT
  1 dirobj !
  motjuste @ 57 = IF 1 predflag ! THEN \ 57=AM; 12sep2010
  NounPhrase
  0 predflag !  \ reset for safety; 12sep2010
  motjuste @ 0 > IF motjuste @ dopsi ! THEN
  0 dirobj !
  0 notjux !  \ Used for negating verbs; 11aug2011
  0 numflag !  \  3dec2009 Whether used here or in BeVerb.
  0 psi3 !  \ reset for safety; 27jul2011
;  ( End of VerbPhrase; return to EnCog )


:  DeCog ( Deutsch Cognition -- thinking in German )
  CR ." Achtung! German input flips thinking into German."
( HauptWort  \ Call a German NounPhrase module; 20jul2011 )
( ZeitWort   \ Call a German VerbPhrase module; 20jul2011 )
;  ( End of DeCog; return to ThInk )


:  EnCog ( English Cognition -- thinking in English )
  0 morphpsi !
  0 psi !
  0 sublen !
  t @ tov !
  yncon @ 1 = IF  \ if flag set in VerbPhrase; 2jul2011
    AskUser  \ for a yes-or-no question; 2jul2011
    EXIT  \ abandon rest of EnCog;  2jul2011
  THEN  \ 2jul2011
  yesorno @ 0 > IF
    SayYes
    CR
    EXIT
  THEN
  0 isflag !   \ 10dec2009 So AI forgets its own "what-is"
  0 areflag !  \ 11dec2009 So AI forgets its own "what-are"
  0 unkflag !  \ 10dec2009 safety measure.
  400 rsvp !   \ Give user time to respond. 23aug2010
  ( exceptional think was above; normal thinking below here )
  CR ." Robot: "
  123  t @  2 aud{ !
  t @ tov !  \ 12jan2010 "{" marks start of thought.
  NounPhrase  \ First of two Chomskyan bifurcations.
  VerbPhrase  \ Second of two Chomskyan bifurcations.
  0 quo !  \ 27dec2009 Reset
  dunnoobject @ 1 = IF  \ 5jan2010 If not yet reset
    qus @ 0 > IF  \ 5jan2010 If query-subject is positive
      qus @ nacpsi !  \ 5jan2010 Prepare for call to NounAct
      48 nounval !  \ 5jan2010 Beef up the activation.
      NounAct  \ 5jan2010 Provide subject for next thought
    THEN  \ 5jan2010 End of test for positive query-subject
  THEN  \ 5jan2010 End of test of dunnoobject
  0 dunnoobject !  \ 5jan2010 No longer an issue.
  0 qus !          \ 5jan2010 Reset after use.
  0 quo !          \ 5jan2010 Reset after use.
  0 quset !        \ 5jan2010
  5 bias !
  0 sknlp !  \ 8jan2010 Reset for use in SelfRef.
  0 qup !   \ 10jan2010 Must be at zero to be used again.
  PsiDecay  \ Reduce activation after each thought; 4aug2011
;  ( End of EnCog )


:  ThInk ( calls EnCog to think in English; 20sep2010 )
  PsiDecay  \ discourage also-rans; 8aug2011
  PsiDecay  \ discourage also-rans; 8aug2011
  0 ordo !
  35 pov !
  glot @ 1 = IF  \ flag for polyglot AI; 20jul2011
    EnCog  ( think in English; 20jul2011 )
  THEN  \ input of German might switch glot to two; 20jul2011
  glot @ 2 = IF  \ upon input of multiple German words;
    DeCog  ( think in Deutsch -- German;  20jul2011 )
  THEN  \ end of test for language-choice in polyglot AI
  fyi @ 1 = IF CR THEN
  0 recon !
  0 ordo !
  rjc @ 1 < IF  \ if AI on but not yet ReJuvenated; 19sep2010
    lurk @ greet @ > IF  \ if limit exceeded; 19sep2010
      100 rsvp !  \ slow down the display; 19sep2010
      -1 lurk ! \ reset for safety; 19sep2010
      kbtv @ 4 > IF  1 kbtv !  THEN  \ test; 19sep2010
    \ 1 kbtv !  \ start the looping cycle; 19sep2010
      1 kbtv +!  \ cycle through values; 19sep2010
      KbTraversal  \ if no input, begin thinking; 19sep2010
    THEN  \ end of test for limit reached; 19sep2010
  THEN  \ end of test of ReJuvenation-count (rjc); 19sep2010
;  ( End of ThInk )


:  MotorOutput ( stub for autonomous control of robots )
   7 EMIT
 ( MOVE_FORWARD   )
 ( MOVE_BACKWARDS )
 ( STOP_MOTION    )
 ( TURN_LEFT      )
 ( TURN_RIGHT     )
;  ( End of MotorOutput stub )


:  TuringTest ( Human-Computer Interaction )
  fyi @ 0 = IF CLS CR CR CR CR CR CR CR
    t @ 439 < IF CR  \ "vault" after "MAYBE"; 21jul2011.
      ." There is no warranty for MindForth AI for robots."
    ELSE CR
    THEN
  THEN
  fyi @ 1 = NOT IF CR THEN
  ."  "
  fyi @ 1 = NOT IF CR THEN
  fyi @ 0 = IF
    CR
    ." Artificial intelligence alive and thinking since "
    bday @ .
    bmonth @  1 = IF ." January "   THEN
    bmonth @  2 = IF ." February "  THEN
    bmonth @  3 = IF ." March "     THEN
    bmonth @  4 = IF ." April "     THEN
    bmonth @  5 = IF ." May "       THEN
    bmonth @  6 = IF ." June "      THEN
    bmonth @  7 = IF ." July "      THEN
    bmonth @  8 = IF ." August "    THEN
    bmonth @  9 = IF ." September " THEN
    bmonth @ 10 = IF ." October "   THEN
    bmonth @ 11 = IF ." November "  THEN
    bmonth @ 12 = IF ." December "  THEN
    byear @ . 8 EMIT 46 EMIT CR
  THEN
  fyi @ 1 = NOT IF
    ." Time = " t @ . 8 EMIT 46 EMIT
    ." KB-Traversal ID = " kbtv @ .
    8 EMIT 46 EMIT
    ."  IQ = " IQ @ . 8 EMIT 46 EMIT
    ."  Cyc = " rjc @ . ." delay = " rsvp @ . 8 EMIT 46 EMIT
    CR ." ENTER a positive or negative Subj-Verb-Obj "
    ." unpunctuated sentence."
    CR
  THEN
  fyi @ 0 = IF CR
   ." Display-mode is normal. Press Tab for other modes; "
   ." ESC to exit."
    CR
  THEN
  fyi @ 3 = IF CR
    ." Diagnostic messages - ignore during input "
    ." before pressing ENTER."
  THEN
  42 pov !
;  ( End of TuringTest Human-Computer Interaction )


:  SeCurity ( new wiki-page name for SECURITY module )
  fyi @ 2 = IF CR
  ."   SeCurity calls HCI TuringTest module."
  THEN
  TuringTest
  t @ cns @ 64 - > IF
    fyi @ 2 = IF CR
    ."   SeCurity module calls ReJuvenate."
    THEN
    ReJuvenate
  THEN
  t   @  1024 > IF
    t @  1024 -  midway !  ( for range limit on searches )
    ELSE
    1   midway !
  THEN
  0 quiet !
;  ( End of SeCurity module )


:  MainLoop  ( changed from ALIFE for wiki doc page )
  TIME&DATE byear ! bmonth ! bday ! bhour ! bminute ! bsec !
  TabulaRasa
  EnBoot
  BEGIN
    SeCurity
    fyi @ 2 = IF CR
    ." MainLoop calls the SensoryInput module." CR
    THEN
    SensoryInput
  ( EmotiOn )
    fyi @ 2 = IF CR
    ." MainLoop calls the ThInk mind-module." CR
    THEN
    ThInk
  ( FreeWill )
  ( MotorOutput )
  AGAIN
;  ( End of MainLoop )


:  ALIFE  ( Call MainLoop if not called by user. )
  MainLoop
; 
Powered by Google Project Hosting