This version of Mind.Forth
was ported into Visual Basic at
http://www.virtualentity.com/mind/vb/
and is being archived here so as to
complete the record of Mind.VB.
A more up-to-date version of Mind.Forth
uses Win32Forth by Tom Zimmer et al. from
ftp://pweb.netcom.com/users/zforth
and is obtainable as text on a Web page at
http://mind.sourceforge.net/mind4th.html
in the same way as the following file.
[ At the end of this ASCII file, remove any text below the last line. ]
----- remove this line and above; rename as "Mind.f" ----------
\ 1feb2KA.f -- modification of 18jan2Ka.f
\ This file may be named "Mind.f" or any "filename.f" you choose.
\ This file is to be run with Win32Forth by issuing three commands:
\ win32for.exe [RETURN]
\ fload Mind.f [RETURN]
\ ALIFE [RETURN]
DECIMAL
\ Mind.f variables
variable a ( activation )
variable attn ( "attention" ) 0 attn !
variable bg ( beginning ) 1 bg !
variable big ( size of arrays ) 1024 big !
variable blankt ( blank-time ) 0 blankt !
variable c ( continuation-flag for "ear" array phonemes )
variable enx ( transfer-to-English-lexicon )
variable eot ( end-of-text for tentative use in SENSORIUM )
variable f ( fiber )
variable fex ( fiber-out )
variable fin ( fiber-in )
variable g ( grammar category ) 1 g !
variable hits ( for eventual use in intensive searches )
( I = Index in loops )
variable len ( length )
variable meme ( concept )
variable midway ( in time )
variable motjuste ( best word )
variable mt ( move-tag ) 0 mt !
variable nen ( English lexical concept number ) 0 nen !
variable nlp ( natural language processing )
variable nlt ( not-later-than ) 0 nlt !
variable onset ( of a word )
variable opt ( option )
variable par ( parse ) 1 par !
variable ph ( phoneme )
variable pos ( part-of-speech )
variable pre ( previous )
variable prevg ( previous grammar category )
variable quota ( for eventual use in intensive searches )
variable rv ( recall-vector )
variable s ( source )
variable seq ( subSEQuent )
variable spy ( level of inspection ) 48 spy !
variable t ( time ) 0 t !
variable tdec ( time-decrement )
variable tse ( time in string-effect )
variable tult ( time-ultimate )
variable tv ( time-of-voice for use with .echo )
variable unk ( "unknown" )
variable ut ( ultimate-tag ) 0 ut !
\ Standards for the sake of Mind.Forth portability.
\ : CELL+ 4+ ;
\ : CELLS 4* ;
\ Above two lines commented out for sake of Win32Forth.
\ Array code for memory channel arrays.
: CHANNEL ( size num -< name >- )
CREATE
OVER
,
* CELLS
ALLOT
DOES>
DUP @
ROT *
ROT +
1 +
CELLS
+ ;
\ Memory channel arrays.
big @ 6 CHANNEL psi{ ( Primitive concept array "psi" )
big @ 6 CHANNEL en{ ( United-Kingdom English lexicon "en" )
big @ 6 CHANNEL ear{ ( Auditory memory channel array "ear" )
\ DECAY and other erasures to clear memory.
: DECAY midway @ nlt @ DO
I 1 psi{ @ 21 > IF ( if "a" is more than 21 )
16 I 1 psi{ ! THEN ( cap preterites at 16 )
I 1 psi{ @ 0 > IF ( if "a" is more than zero )
-1 I 1 psi{ +! THEN ( let "a" decay by minus one )
-1 +LOOP
spy @ 50 = IF ." D: nlt = " nlt @ . THEN
; \ Return to ALIFE main program loop.
\ : PSI-CLEAR 0 t @ DO 0 I 1 psi{ ! -1 +LOOP ;
: TABULARASA 0 a ! BEGIN big @ 0 DO
0 I a @ psi{ ! 0 I a @ en{ ! 0 I a @ ear{ !
LOOP 1 a +! a @ 6 < WHILE REPEAT ; \ Return to ALIFE.
\ DAMPing functions.
: PSI-DAMP spy @ 50 > IF CR ." PSI-DAMP: pre-damp a = "
a @ . ." ; t = " t @ . ." ; nlt = " nlt @ .
." and meme = " meme @ . CR THEN
midway @ t @ DO \ Cycle backwards through time.
I 0 psi{ @ meme @ = \ Look for "meme"...
IF 0 I 1 psi{ ! \ dampen to zero.
THEN -1 +LOOP
; \ Return to NOUN-PHRASE, PREDICATE.
: EN-DAMP midway @ t @ DO 0 I 1 en{ ! -1 +LOOP
spy @ 50 > IF CR THEN ; \ Return to NOUN-PHRASE, PREDICATE.
: EAR-DAMP midway @ t @ DO 0 I 1 ear{ ! -1 +LOOP
; \ Return to SENSORIUM.
: SUBJ-DAMP midway @ nlt @ DO
I 0 psi{ @ motjuste @ = IF
I 2 psi{ @ meme !
midway @ nlt @ DO
I 0 psi{ @ meme @ = IF
I 1 psi{ @ 30 > IF
30 I 1 psi{ ! THEN THEN -1 +LOOP THEN
-1 +LOOP ; \ Return to PREDICATE.
: OBJ-DAMP midway @ nlt @ DO
I 0 psi{ @ motjuste @ = IF
I 4 psi{ @ meme !
midway @ nlt @ DO
I 0 psi{ @ meme @ = IF
I 1 psi{ @ 32 > IF
32 I 1 psi{ ! THEN THEN -1 +LOOP THEN
-1 +LOOP ; \ Return to PREDICATE.
\ .psi shows the contents of the deep mindcore "psi".
: .psi CR ." Mindcore concepts and flags:"
CR ." time: f a pre enx seq nlp "
t @ 1+ midway @ DO \ Look as far back as "midway".
I 0 psi{ @ 0 >
IF CR I . ." : "
I 0 psi{ @ . ." " I 1 psi{ @ . ." " I 2 psi{ @ . ." "
I 3 psi{ @ enx ! enx @ . I 4 psi{ @ . ." " I 5 psi{ @ . ." "
enx @ 0 >
IF ." to " I unk ! 0 rv ! midway @ unk @ DO
I 0 en{ @ enx @ =
IF I 5 en{ @ rv ! rv @ 0= NOT
IF BEGIN rv @ 0 ear{ @ EMIT 1 rv +! rv @ 0 ear{ @
0= UNTIL ." "
THEN
0 rv ! LEAVE ( one engrammed word is enough )
THEN -1 +LOOP
THEN
THEN LOOP CR ." time: f a pre ukx seq nlp " 0 unk !
; \ to be called by user or by diagnostics.
\ .en displays the English lexicon array "en{".
: .en CR ." en{ items when t = " t @ . ." : "
CR ." t nen a g fin fex rv:"
t @ 1+ midway @ DO
I 0 en{ @ unk ! unk @ 0 > ( display positive data )
IF CR I . unk @ . ." "
I 1 en{ @ . ." " I 2 en{ @ . ." " I 3 en{ @ . ." "
I 4 en{ @ . ." " I 5 en{ @ rv ! rv @ . ." to " BEGIN
rv @ 0 ear{ @ EMIT 1 rv +! rv @ 0 ear{ @ 0= UNTIL
." " 0 rv !
THEN LOOP 0 unk !
CR ." t nen a g fin fex rv" CR
; \ called by user or programmer by entering: .uk
\ .ear and .echo display the auditory memory channel.
: .ear
CR ." ear at time " t @ . ." : ph a bg c u s"
t @ 1+ t @ 20 - DO ( show the last 20 "phonemes" )
CR ." ear{ at time " I . ." "
I 0 ear{ @ 33 <
IF ." " ( show a blank )
ELSE I 0 ear{ @ EMIT ." " I 1 ear{ @ . ." " I 2 ear{ @ . ." "
I 3 ear{ @ . ." " I 4 ear{ @ . ." " I 5 ear{ @ EMIT
THEN LOOP
; \ called by user or programmer by entering: .ear
: .echo CR ." Robot: "
t @ 1+ tv @ DO \ Display ear{ from time-of-voice "tv".
I 0 ear{ @ 33 < IF ." " THEN ( show a blank )
I 0 ear{ @ EMIT LOOP ; \ Return to HCI, AUTONOMY.
\ SPREADACT spreads activation among concepts.
\ It follows "pre" and "seq" tags to find related concepts.
: SPREADACT
midway @ t @ 1+ DO ( loop backwards to midway )
pre @ 0 >
IF I 0 psi{ @ pre @ =
IF
attn @ -1 = IF 30 I 1 psi{ +!
ELSE 24 I 1 psi{ +!
THEN
THEN
THEN seq @ 0 >
IF I 0 psi{ @ seq @ =
IF
attn @ -1 = IF 10 I 1 psi{ +!
ELSE 7 I 1 psi{ +!
THEN
THEN
THEN
-1 +LOOP ; \ Return to ACTIVATE.
\ ACTIVATE activates recent nodes of a given concept.
: ACTIVATE spy @ 50 > IF
CR ." ACTIVATE: pre seq = " pre @ . seq @ . CR
CR ." ACTIVATE: mt = " mt @ . ." at t = " t @ . THEN
\ 18jan2000: The use of nlt will now permit this module
\ to give higher activations to old concepts than to input.
midway @ nlt @ DO ( loop backwards to midway )
I 0 psi{ @ mt @ = ( a node of the move-tag? )
IF
attn @ -1 = ( during "attention" mode... )
IF 20 I 1 psi{ ! ( increase the activation, )
ELSE 8 I 1 psi{ ! THEN
I 2 psi{ @ pre !
I 4 psi{ @ seq !
SPREADACT 0 pre ! 0 seq ! 0 a !
THEN
-1 +LOOP 0 a ! spy @ 50 > IF CR THEN
; \ Return to OLDCONCEPT, TRANSFORMATION.
\ INSTANTIATE creates a concept node with tags.
: INSTANTIATE ( concept fiber f ) f @ t @ 0 psi{ !
( Set "a" activation level. ) a @ t @ 1 psi{ +!
( Store PREvious associand. ) pre @ t @ 2 psi{ !
( Store the EN-transfer tag. ) enx @ t @ 3 psi{ !
( Store the subSEQuent tag. ) seq @ t @ 4 psi{ !
( Store functional NLP code. ) nlp @ t @ 5 psi{ !
spy @ 50 > IF CR ." INSTANTIATE t : f a pre ukx seq nlp "
CR ." INSTANTIATE " t @ . 58 EMIT ." "
t @ 0 psi{ @ . ." " t @ 1 psi{ @ . ." " t @ 2 psi{ @ . ." "
t @ 3 psi{ @ . ." " t @ 4 psi{ @ . ." " t @ 5 psi{ @ . CR
THEN
0 f ! 0 enx ! 0 seq ! 0 nlp ! ( reset for safety )
; \ Return to OLDCONCEPT or to NEWCONCEPT.
\ ATTACH creates a node on a lexicon array item.
: ATTACH ( Concept number "nen". ) mt @ t @ 0 en{ !
( Do not store the activation level; it is a transient. )
( Store the grammar category "g".) g @ t @ 2 en{ !
( Store mindcore IN tag. ) fin @ t @ 3 en{ !
( Store mindcore EXit tag. ) fex @ t @ 4 en{ !
( Store the recall vector "rv". ) rv @ t @ 5 en{ !
spy @ 51 > IF CR ." ATTACH " t @ . ." : "
t @ 0 en{ @ . ." " t @ 1 en{ @ . ." " t @ 2 en{ @ . ." "
." = rv to " 34 EMIT rv @ a ! 40 1 DO
a @ 0 ear{ @ EMIT
a @ 3 ear{ @ 0 = IF LEAVE THEN
a @ 1+ a ! ( increment looping address )
LOOP 0 a ! 34 EMIT CR
." ATTACH t: nen a g fin fex rv " THEN
; \ Return to OLDCONCEPT or to NEWCONCEPT.
\ OLDCONCEPT deals with recognition of old concepts.
: OLDCONCEPT attn @ -1 = IF 32 a ! ELSE 8 a ! THEN
par @ 3 = IF 5 g ! 5 nlp ! 4 par ! THEN
par @ 2 = IF 8 g ! 8 nlp ! 3 par ! THEN
par @ 1 = IF 0 pre ! 5 g ! 5 nlp ! 2 par ! THEN
midway @ t @ DO I 0 en{ @ mt @ = IF I 3 en{ @ 0 > IF
I 3 en{ @ fin ! LEAVE THEN THEN -1 +LOOP
ATTACH ( creates an ENglish node )
spy @ 50 > IF CR ." OLDC: pre seq = " pre @ . seq @ . THEN
attn @ -1 = IF spy @ 51 > IF ." mt from fin " fin @ . THEN
fin @ mt ! THEN mt @ f ! mt @ enx !
INSTANTIATE 0 nlp ! pre @ unk ! ACTIVATE unk @ pre ! 0 unk !
\ The next lines store "seq" retroactively:
midway @ t @ DO I 0 psi{ @ pre @ = IF
mt @ I 4 psi{ ! LEAVE THEN -1 +LOOP
mt @ pre ! ( for next nen ) par @ 3 > IF 0 pre ! 1 par ! THEN
0 a ! ; \ Return to RETRO.
\ NEWCONCEPT deals with learning of new concepts.
: NEWCONCEPT 1 nen +! par @ prevg !
nen @ mt ! nen @ fin ! nen @ fex !
par @ 3 = IF 5 g ! 32 a ! 5 nlp ! 4 par ! THEN
par @ 2 = IF 8 g ! 32 a ! 8 nlp ! 3 par ! THEN
par @ 1 = IF 5 g ! 32 a ! 5 nlp ! 2 par ! THEN
ATTACH ( creates ENglish node ) 0 fin ! 0 fex !
nen @ f ! nen @ enx !
INSTANTIATE 0 nlp ! ( reset )
midway @ t @ DO \ Make nen "seq" of its "pre" concept.
I 0 psi{ @ pre @ = IF
nen @ I 4 psi{ ! LEAVE THEN
-1 +LOOP nen @ pre ! \ So that the next "nen" has a "pre".
par @ 3 > IF 1 par ! THEN 0 a ! ; \ Return to RETRO.
\ STRING-EFFECT helps recognize words and morphemes.
: STRING-EFFECT \ increases a(ctivation) of next-in-line char
tdec @ 1+ tse ! \ tse = "time (in) string-effect"
tse @ 1 ear{ @ 8 + a ! ( fetch a & increase by 8 )
a @ tse @ 1 ear{ ! \ Store the higher a(ctivation).
0 a ! ; \ Return to COMPARATOR.
\ COMPARATOR matches each phoneme against memory.
: COMPARATOR
0 mt ! blankt @ tdec ! blankt @ tse !
midway @ blankt @ DO I 0 ear{ @ ph !
unk @ ph @ = IF ( match? ) I 1 ear{ @ a !
I 2 ear{ @ 1 = IF 8 a +! THEN
a @ 0 > IF I 4 ear{ @ ut !
ut @ 0 > IF
I 3 ear{ @ 1 = NOT IF ut @ mt ! THEN
4 ut @ 1 en{ ! ( increase activation ) 0 ut !
THEN
STRING-EFFECT
THEN 0 a !
THEN tse @ 1 + tse ! tdec @ 1- tdec !
-1 +LOOP ; \ Return to short term memory STM.
\ STM is "Short Term Memory" of auditory engrams.
: STM
unk @ 32 > IF COMPARATOR THEN ( ASCII 32 = SPACE-bar )
t @ 1- 0 ear{ @ 0= IF 1 bg ! THEN
unk @ t @ 0 ear{ ! \ Store the unk phoneme at time t
0 t @ 1 ear{ ! \ Store no a(ctivation) level.
bg @ t @ 2 ear{ ! \ b(e)g(inning)? 1 Yes or 0 No.
c @ t @ 3 ear{ ! \ c(ontinuation)? 1=Y or 0 = No.
ut @ t @ 4 ear{ ! \ u(ltimate) tag # to a concept.
s @ t @ 5 ear{ ! \ s(ource): internal -, external +
unk @ 32 = IF t @ blankt ! THEN
; \ Return to SENSORIUM.
\ RETRO goes back and tags a word that has just ended.
: RETRO \ Called by SENSORIUM when incoming character = 32 SP
t @ blankt ! t @ 1 - tult !
0 tult @ 3 ear{ !
spy @ 51 > IF CR ." RETRO: move-tag = " mt @ . THEN
mt @ 0 > IF onset @ rv ! 0 onset !
mt @ tult @ 4 ear{ ! \ Store the move-tag "mt".
OLDCONCEPT 0 mt ! 0 rv !
ELSE len @ 0 > IF onset @ ( from SENSORIUM ) rv !
NEWCONCEPT
spy @ 53 > IF ." RETRO: rv = " rv @ . CR THEN
nen @ tult @ 4 ear{ ! \ Store new concept ultimate-tag.
THEN
THEN EAR-DAMP
0 len ! 0 rv !
; \ Return to SENSORIUM.
\ AUDITION handles the input of ASCII in lieu of phonemes.
: UPSET unk @ DUP 96 > IF DUP 123 < IF 32 - THEN THEN
unk ! ; \ UPSET returns to AUDITION.
: AUDITION attn @ -1 =
IF KEY?
IF KEY
THEN KEY unk ! unk @ EMIT ( Display input of user. )
THEN
\ If "attn" is off, the reentry process supplies "unk".
UPSET \ Converts input to upper case for ease of processing.
; \ Return to SENSORIUM.
\ SENSORIUM handles the input of sensory perception.
: SENSORIUM EAR-DAMP ( to clear auditory memory )
t @ nlt ! \ 18jan2000: A no-later-than demarcation so that
\ fresh input can have lower activation than old reactivations.
80 0 DO \ Accept entry of at most 80 characters.
AUDITION ( retrieve the incoming or reentering phonemes )
1 t +! ( increment time "t" by one unit. )
unk @ 13 = IF 1 bg ! 13 eot ! t @ blankt ! 32 unk ! 10 EMIT
3 par ! THEN
unk @ 27 = IF CR ." SENSORIUM: halt. You may enter .psi .en .ear "
CR ." to see the contents of psi, en, or ear." 0 unk ! QUIT THEN
unk @ 32 = ( space-bar )
IF RETRO ( to adjust ending of a recognized word )
THEN 1 bg ! 1 c ! blankt @ 1 + onset ! t @ onset @ = bg !
unk @ 32 >
IF 1 len +! STM ( store character in Short Term Memory )
THEN
eot @ 13 = IF 0 attn ! 0 eot ! THEN
attn @ IF ELSE 3 prevg ! LEAVE THEN ( 29aug1999 from expert )
LOOP ; \ Return to ALIFE or to the reentry process.
\ PSI-1 is the first mindcore "psi bootstrap sequence.
: PSI-1 \ Concept fiber: f + a + pre + enx + seq + nlp
1 t ! \ Then next line sets up the concept fiber for "I":
9 f ! 1 a ! 0 pre ! 9 enx ! 37 seq ! 5 nlp ! INSTANTIATE
6 t ! \ We establish the mindcore fiber of "know":
37 f ! 0 a ! 9 pre ! 37 enx ! 13 seq ! 8 nlp ! INSTANTIATE
10 t ! \ We establish the mindcore fiber of "you" ("other"):
13 f ! 0 a ! 37 pre ! 13 enx ! 0 seq ! 5 nlp ! INSTANTIATE
; \ Return to the main BOOTSTRAP subroutine.
\ NLP: 1=adj 2=adv 3=conj 4=interj 5=noun 6=prep 7=pron 8=verb
\ EN-1 is the first English lexicon bootstrap sequence.
: EN-1 \ Instantiating "I know you."
\ "I" ( "self" ) is mindcore octave two, overall concept #9"
9 mt ! 5 g ! 13 fin ! 9 fex ! 1 rv ! 1 t ! ATTACH
\ "know" is mindcore octave five, concept #37:
37 mt ! 8 g ! 37 fin ! 37 fex ! 3 rv ! 6 t ! ATTACH
\ "you" ( "other" ) is mindcore octave one, concept #13:
13 mt ! 5 g ! 9 fin ! 13 fex ! 8 rv ! 10 t ! ATTACH
0 mt ! ; \ Return to the main BOOTSTRAP subroutine.
\ EAR-1 is the first auditory engram bootstrap.
: EAR-1 \ ASCII storage of words and tags in the array ear{.
( I ) 1 t ! 73 unk ! 1 bg ! 0 c ! 9 ut ! 45 s ! STM
( K ) 3 t ! 75 unk ! 1 bg ! 1 c ! 0 ut ! 45 s ! STM
( N ) 4 t ! 78 unk ! 1 bg ! 1 c ! 0 ut ! STM
( O ) 5 t ! 79 unk ! 1 bg ! 1 c ! 0 ut ! STM
( W ) 6 t ! 87 unk ! 1 bg ! 0 c ! 37 ut ! STM
( Y ) 8 t ! 89 unk ! 1 bg ! 1 c ! 0 ut ! 45 s ! STM
( O ) 9 t ! 79 unk ! 1 bg ! 1 c ! 0 ut ! STM
( U ) 10 t ! 85 unk ! 1 bg ! 0 c ! 13 ut ! STM
; \ Return to the main BOOTSTRAP subroutine.
\ PSI-2 is the second mindcore "psi" bootstrap.
: PSI-2
15 t ! \ "you" ( other")
13 f ! 0 a ! 0 pre ! 13 enx ! 39 seq ! 5 nlp ! INSTANTIATE
19 t ! \ "see"
39 f ! 0 a ! 13 pre ! 39 enx ! 10 seq ! 8 nlp ! INSTANTIATE
22 t ! \ "me" ( "self" )
10 f ! 0 a ! 39 pre ! 10 enx ! 0 seq ! 5 nlp ! INSTANTIATE
; \ Return to the main BOOTSTRAP subroutine.
\ EN-2 is the second English lexicon bootstrap sequence.
: EN-2
\ "you" is mindcore octave two, concept #13:
\ "you" going in goes to concept fin #9: "I" ( self ):
13 mt ! 5 g ! 9 fin ! 13 fex ! 13 rv ! 15 t ! ATTACH
\ "see" is mindcore octave five, concept #39:
39 mt ! 8 g ! 39 fin ! 39 fex ! 17 rv ! 19 t ! ATTACH
\ "me" ( "self" ) is mindcore octave two, concept #9:
10 mt ! 5 g ! 13 fin ! 10 fex ! 21 rv ! 22 t ! ATTACH
0 mt ! 0 a ! 0 fin ! 0 fex !
; \ Return to the main BOOTSTRAP subroutine.
\ EAR-2 is the second auditory engram bootstrap.
: EAR-2
( Y ) 13 t ! 89 unk ! 1 bg ! 1 c ! 0 ut ! 45 s ! STM
( O ) 14 t ! 79 unk ! 0 bg ! 1 c ! 0 ut ! STM
( U ) 15 t ! 85 unk ! 0 bg ! 0 c ! 13 ut ! STM
( S ) 17 t ! 83 unk ! 1 bg ! 1 c ! 0 ut ! 45 s ! STM
( E ) 18 t ! 69 unk ! 0 bg ! 1 c ! 0 ut ! STM
( E ) 19 t ! 69 unk ! 0 bg ! 0 c ! 39 ut ! STM
( M ) 21 t ! 77 unk ! 1 bg ! 1 c ! 0 ut ! 45 s ! STM
( E ) 22 t ! 69 unk ! 0 bg ! 0 c ! 10 ut ! STM
23 t ! 0 ut !
; \ Return to the main BOOTSTRAP subroutine.
\ BOOTSTRAP calls the user-written bootstrap sequences.
: BOOTSTRAP
EAR-1 \ "I know you"
EN-1
PSI-1
EAR-2 \ "You see me"
EN-2
PSI-2
1 t +!
t @ nlt ! ( nlt may be basis for DAMP functions )
64 nen ! \ Only assign concepts above the pre-set first 64.
; \ Return to the main ALIFE loop.
\ FLUSHVECTOR flushes deep concepts up into syntax.
: FLUSHVECTOR 0 a !
midway @ t @ 1+ DO \ Some psi have HOLODYNE "a"
I 1 psi{ @ 0 > IF
I 1 psi{ @ a !
I 3 psi{ @ enx ! THEN
enx @ 0 > IF
midway @ t @ 1+ DO
I 0 en{ @ enx @ = IF
a @ I 1 en{ ! THEN
-1 +LOOP THEN 0 enx ! 0 a !
-1 +LOOP
; \ Return to NOUN-PHRASE, PREDICATE.
\ SPEECH follows recall-vector "rv" to say phonemes.
: SPEECH ( for output of single words, not entire sentences )
rv @ onset ! ( Save first rv as the onset of a word. )
spy @ 51 > IF CR ." SPEECH: " CR THEN
\ Next line assumes no word will be longer than 40 phonemes:
40 1 DO \ Perform this loop up to forty times.
rv @ 0 ear{ @ unk ! unk @ EMIT ( say or display "rv" )
45 s ! ( internal source "s"; 45 is ASCII for minus "-" )
SENSORIUM ( for reentry of a thought back into the mind )
rv @ 3 ear{ @ 0 = IF LEAVE THEN ( if end of word )
\ With each loop, increase the recall-vector "rv" by one so as
\ to retrieve each successive phoneme from the auditory memory:
rv @ 1+ rv ! LOOP 0 rv !
; \ Return to NOUN-PHRASE, PREDICATE, etc.
\ NOUN-PHRASE finds the currently most active noun.
: NOUN-PHRASE 5 opt ! 0 unk ! 0 mt ! 0 motjuste ! 0 rv ! 0 a !
spy @ 50 = IF .psi THEN ( diagnostic level 2: show concepts )
FLUSHVECTOR ( to move deep concepts up to English "en{" )
midway @ t @ DO I 1 en{ @ 0 > IF ( if en "a" is positive )
I 1 en{ @ a ! ( then store the "a" level )
I 2 en{ @ 5 = IF ( if "opt" part of sp. )
a @ unk @ > IF I 0 en{ @ mt ! ( move-tag of item )
I 5 en{ @ rv ! ( auditory recall-vector )
a @ unk ! ( to test for an even higher "a" ) mt @ motjuste !
spy @ 49 > IF CR ." NOUN-PHRASE: most active a " a @ .
." is for mt " mt @ . ." with rv " rv @ . CR THEN
THEN THEN
THEN -1 +LOOP mt @ meme ! PSI-DAMP EN-DAMP
SPEECH 0 a ! ; \ Retrun to SUBJECT, PREDICATE.
\ SUBJECT assembles a phrase to be subject of verb.
: SUBJECT
spy @ -1 = IF CR ." SUBJECT: " THEN
NOUN-PHRASE ( finds "le mot juste" to be the subject )
\ RETRO, invoked by SENSORIUM, will need to store in ear{ }
\ the concept number of "motjuste" as a move-tag "mt":
motjuste @ mt ! ( send the found move-tag into RETRO )
\ A SPACE-bar will be needed in SENSORIUM to call RETRO:
32 unk ! ( Set the "unk" variable to ASCII 32 SPACE-bar. )
\ Although called separately during REENTRY of "le mot juste,"
SENSORIUM \ must now be called to receive a SPACE-bar.
; \ Return to the ENGLISH module.
\ PREDICATE assembles a phrase of verb plus object.
: PREDICATE 8 opt ! 0 unk ! 0 mt ! 0 motjuste ! 2 par !
FLUSHVECTOR ( to move deep concepts up to English "en{" )
spy @ 50 > IF CR ." PREDICATE: " THEN
midway @ t @ DO I 1 en{ @ 0 > IF ( if en "a" is positive )
I 1 en{ @ a ! ( then store the "a" level )
I 2 en{ @ 8 = IF ( a verb? )
a @ unk @ > IF I 0 en{ @ mt ! ( move-tag of item )
I 5 en{ @ rv ! ( auditory recall-vector )
a @ unk ! ( to test for an even higher "a" ) mt @ motjuste !
spy @ 50 > IF CR ." PREDICATE: most active a " a @ .
." is for mt " mt @ . ." with rv " rv @ . THEN THEN THEN THEN
-1 +LOOP mt @ meme ! PSI-DAMP 32 EMIT SPEECH motjuste @ mt !
EN-DAMP 32 unk ! SENSORIUM SUBJ-DAMP
3 par ! 32 EMIT NOUN-PHRASE OBJ-DAMP
; \ Return to the ENGLISH module.
\ ENGLISH is the syntax of an English sentence.
: ENGLISH
spy @ 50 = IF .psi ." Press RETURN " KEY THEN
0 attn ! \ Turns off "attention" during reentry mode.
t @ tv ! \ Store current "t" as time-of-voice for ".echo".
\ The AI fills in the next line by generating a thought:
CR ." Robot: "
SUBJECT ( finds "le mot juste" to be the subject )
PREDICATE ( finds "le mot juste" for verb and for object )
motjuste @ mt ! ( so that RETRO will invoke OLDCONCEPT )
13 unk ! SENSORIUM ( ASCII 13 CR to trip a call of RETRO )
; \ Return to the TRANSFORMATION module.
\ DISCRIMINATE "squeezes out" subjects, verbs, etc.
: DISCRIMINATE
spy @ 50 = IF CR ." DISCRIMINATE: Active concept = " THEN
0 a ! 1 unk !
midway @ t @ 1+ DO
I 1 psi{ @ unk @ > IF ( if psi "a" is larger...)
I 1 psi{ @ a ! ( ... hold the "a" level )
I 0 psi{ @ meme ! ( ... hold the meme )
I 2 psi{ @ pre ! ( ... hold its "pre"? )
I 4 psi{ @ seq ! ( ... hold its "seq"? )
I 5 psi{ @ nlp ! ( ... hold its part-of-speech )
THEN a @ unk ! ( next use "a" as the higher standard )
-1 +LOOP ( with each loop, possibly find a higher "a" )
spy @ 50 = IF meme @ . THEN
; \ Return to TRANSFORMATION.
\ TRANSFORMATION calls a Chomskyan syntax structure.
: TRANSFORMATION
DISCRIMINATE ( to pick and choose among active concepts )
\ If no verb, push into ACTIVATE + SPREADACT to force a verb:
meme @ mt ! nlp @ 8 = NOT IF
spy @ 50 = IF ." Xf. 1st call to ACTIVATE " THEN
-1 attn ! SPREADACT 0 mt ! 0 attn !
DISCRIMINATE THEN \ to search again
meme @ mt ! nlp @ 8 = NOT IF
spy @ 50 = IF ." Xf. 2nd call to ACTIVATE " THEN
-1 attn ! SPREADACT 0 mt ! 0 attn !
DISCRIMINATE THEN \ to search again
\ If the meme is an 8/verb, run it through ACTIVATE + SPREADACT
\ in order to accentuate the activation of the subject:
meme @ mt ! nlp @ 8 = IF ( if no verb on 3rd try, never mind )
spy @ 50 = IF ." Xf. verb ! Call ACTIVATE " THEN
-1 attn ! SPREADACT 0 mt ! 0 attn ! THEN 0 a !
ENGLISH ( that is, the syntactic structure of English )
; \ Return to the main ALIFE loop.
\ HCI is the human-computer interface of Mind.Forth AI.
: HCI 0 unk ! ( remove whatever value rode in here )
spy @ 49 > IF .echo THEN ( after diagnostic blur, show I/O )
CR CR ." HCI: Please enter a diagnostic level from 1 to 9."
CR ." For instance, 1 (no diagnostics) or 2 (troubleshooting)."
CR ." Enter subject + transitive verb + object (no punctuation)."
KEY unk ! unk @ 27 = IF CR ." Halt." QUIT THEN
unk @ spy !
; \ Return to the AUTONOMY subroutine.
\ AUTONOMY is the auto-pilot mode of stand-alone AI.
: AUTONOMY
\ spy @ 49 > IF .echo THEN ( show output of AI )
CR CR ." Press TAB for user input, or ESC to quit:"
75 1 DO
." ." ( display a series of dots....)
KEY? IF KEY THEN KEY unk ! -1 attn !
unk @ 27 = IF CR ." Halt. " QUIT THEN
unk @ 9 = IF CR CR ." AUTONOMY: Interruption by user."
HCI LEAVE THEN
\ ELSE ( if no keypress ) 0 attn ! ( bypass user entry )
LOOP CR 0 unk !
; \ Return to the main program loop ALIFE.
\ ALIFE is the main program loop of Mind.Forth AI.
: ALIFE t @ blankt ! 49 spy ! ." (clearing memory...)"
CR ." There is no warranty for what this software does."
TABULARASA ( to erase all memory arrays )
BOOTSTRAP ( to load some initial concepts )
BEGIN t @ 200 >
IF t @ 200 - midway ! ( for a range limit on searches )
ELSE 0 midway ! THEN
DECAY
TRANSFORMATION ( to choose a Chomskyan syntactic structure )
DECAY
AUTONOMY ( for independent operation, if no input )
attn @ -1 = ( while in attention mode, do the following )
IF t @ blankt ! CR ( keep track of moment before input )
43 s ! ( ASCII 43 = "+" to designate "source" as external.)
CR ." User: " ( a prompt for the user to type in a sentence )
1 par ! ( expect a noun or pronoun )
SENSORIUM ( for sensory input from the environment )
t @ 999 > IF CR ." Program timed out at 999 " QUIT THEN
THEN AGAIN ; \ 7sep1999 footnote: Includes help from Jeff Fox.
-------- remove this line and anything below it --------
Mind-Module Documentation Links
spredact.html Spreadact module for spreading activation
activate.html Activate module for old concepts
instiate.html Instantiate module of Psi concepts
envocab.html English Vocabulary enVocab module
oldcept.html Oldconcept module of Psi-En concepts
newcept.html Newconcept module for machine learning
audrecog.html audRecog Auditory Recognition comparator
audstm.html auditory Short Term Memory (audSTM)
listen.html Listen module
audition.html Audition module
visrecog.html ideas for visRecog Visual Recognition
sesorium.html input Sensorium module
enboot.html enBoot English bootstrap
rejuve.html Rejuvenate module
ego.html Ego self-assertion module
reify.html Reify module
reentry.html reEntry process/module
speech.html Speech module
n-phrase.html Noun-Phrase module
v-phrase.html Verb-Phrase module
svo.html SVO (subject-verb-object) syntax
english.html English module
think.html Think module
hci.html Human-Computer Interaction (HCI) module
security.html Security module
alife.html -- the main ALIFE loop.
Last updated: 13 September 2003
Return to top; or
Site Map page; or to the
http://sourceforge.net/projects/mind summary page.