Peter Hickman wrote a historically dazzling post, readable at:
http://www.mailgate.org/comp/comp.ai.neural-nets/msg07244.html 

>"Arthur T. Murray" <mentifex / scn.org> wrote in message
>> ATM:
>> http://mind.sourceforge.net/index.html "The JavaScript AI Mind"
>> is not vaporware.  Yesterday, after the insertion of a psiDecay()
>> module to remove stray activations from the simulated neurons of
>> the AI based on spreading activation, the Mind began to function:

PH:
> Cut the [...].

> Heres my transcript...

D:\My Documents>ruby fred.rb
HUMAN: cats eat fish
ROBOT: CATS EAT FISH

HUMAN: fish eat bugs
ROBOT: FISH EAT BUGS

HUMAN: bugs eat dirt
ROBOT: BUGS EAT DIRT

HUMAN: cats eat
ROBOT: CATS EAT FISH

HUMAN: fish eat bugs
ROBOT: Yes

HUMAN: quit

> The code in ruby follows...

> Note that there is no removal of "stray activations from the 
> simulated neurons of the AI based on spreading activation" or 
> other such crap. Its clean, jargon free, took half an hour to 
> write and does more than your code.
ATM:
Upon careful inspection, the Ruby code, although praiseworthy and
admirable by dint of ingenuity and brilliance, is not a Rubymind:
http://mind.sourceforge.net/ruby.html -- still to be implemented!
PH:
> Note it can confirm that "FISH EAT BUGS". Now have I written an
> AI that "builds up a miniature knowledge base (KB) of facts about
> what animals eat" or just a look up table on ungrounded symbols.
ATM:
You have started Ruby AI; please consider releasing your code and
other ideas at FAQTS : Computers : Programming : Languages : Ruby 
http://www.faqts.com/knowledge_base/index.phtml/fid/1000 on-line.

>> The sample inputs were designed as a "worst-case" test in which
>> English words jump from functioning as direct objects to subjects
>> in the subject-verb-object (SVO) syntax required for user input.

PH:
> Well my code can handle your "worst-case" and do all this
> jumping "from functioning as direct objects to subjects in the
> subject-verb-object (SVO) syntax" that you seem so proud of so
> lets try another session.
ATM:
Please also try a session with MSIE JavaScript of the AI Mind at
http://www.scn.org/~mentifex/jsaimind.html -- version "1jan02A".

There you will find the brand-new (31dec2001 and 1jan2002) coding
of the "Rejuvenate()" function which will let the AI live forever.

For the sake of robots, the Mentifex AI remains very much a Forth
AI project which must first attain stability in JavaScript before
http://www.scn.org/~mentifex/mind4th.html is brought up to date.

PH:

D:\My Documents>ruby fred.rb
HUMAN: qwe asd zxc
ROBOT: QWE ASD ZXC

HUMAN: wer sdf xcv
ROBOT: WER SDF XCV

HUMAN: ert dfg cvb
ROBOT: ERT DFG CVB

HUMAN: qwe asd
ROBOT: QWE ASD ZXC

HUMAN: qwe asd zxc
ROBOT: Yes

HUMAN: quit

> Gosh it even handles the "subject-verb-object (SVO) syntax" of 
> a language that doesn't even exist! My program must be smart!!
ATM:
>> The JavaScript AI Mind (q.v.) has no access to "physical concepts"
PH:
> Much like yourself.

class Triple
    def initialize(a, b, c)
        @a = a.upcase
        @b = b.upcase
        @c = c.upcase

        display
    end

    def match2(a, b)
        if a == @a and b == @b then
            display
            return true
        else
            return false
        end
    end

    def match3(a, b, c)
        if a == @a and b == @b and c == @c then
            print "ROBOT: Yes\n\n"
            return true
        else
            return false
        end
    end

    private

    def display
        print "ROBOT: #{@a} #{@b} #{@c}\n\n"
    end
end

class Query
    def initialize
        @x = Array.new
    end

    def run
        response = ''
        while response != 'QUIT' do
            print "HUMAN: "
            response = gets.upcase.chomp
            list = response.split
            if list.length == 2 then
                ok = 0
                @x.each {|y|
                    if y.match2(list[0], list[1]) == true then
                        ok = 1
                        break;
                    end
                }
                if ok == 0 then
                    print "ROBOT: Dont know\n\n"
                end
            elsif list.length == 3 then
                ok = 0
                @x.each {|y|
                    if y.match3(list[0], list[1], list[2]) == true then
                        ok = 1
                        break;
                    end
                }

                if ok != 1 then
                    @x << Triple.new(list[0], list[1], list[2])
                end
            else
                print "Please input SUBJECT OBJECT and optional VERB\n"
            end
        end
    end
end

Query.new.run