purplecat: Hand Drawn picture of a Toy Cat (agents)
[personal profile] purplecat
People are always telling me that my usual languages, like Prolog, are silly or, at the very least, impractical, but Java has just got me flummoxed.

I have a list (of logical formulae as it happens) and I want to know if my agent believes everything in the list. To complicate matters the the list can contain variables so the agent might believe them in different ways. So my list might be - do I believe there is something, x say, such that 1) x is blue and 2) x has four legs and the answer might be "blue cow is blue and blue cow has four legs"* but I might also believe that the sky is blue and any number of other things are blue. The object is to find something that I believe is blue and which I also believe has four legs.

This is incredibly easy in Prolog. I just go through the list of formulae one at a time creating a candidate answer, if the answer fails at any point then the programming language automatically back tracks up the list looking for alternatives.

Java doesn't do back tracking. I'm going to have to do something complicated involving keeping track of where I am in the list and which of the alternative candidates I have explored and then zipping back and forth in a sensible fashion. I've appealed to B. who is supposed to be a bit of a dab hand with imperative languages and he looked a bit blank and then started talking about custom iterators.

* with apologies to those of you don't watch CBeebies.

(no subject)

Date: 2007-08-03 04:05 pm (UTC)
From: [identity profile] scimon.livejournal.com
Java programmers may tell you Prolog is a silly language. This is because they are mindless drones who don't like to think.

Personally Prolog is one of my favourite languages, and one day i'm going to try and write something in LISP. Now there is a language that Java coders just don't get.

(no subject)

Date: 2007-08-03 04:31 pm (UTC)
From: [identity profile] scimon.livejournal.com
ML is another language I really loved at Uni, but you don't get to use much in the real world. ;)

Thankfully I don't have to use Java.

But I do use Perl and Javascript and those are really fun kettles of whale guts.

(no subject)

Date: 2007-08-04 09:03 am (UTC)
From: [identity profile] foradan.livejournal.com
I don't know about Java. Here is some python:

for x in list_of_things:
if all(b.test_belief(x) for b in list_of_formulae):
do_something_with(x)
break # if you only are looking for the first matching x

Hmmm, I don't know Java very well but doesn't it have the 'break' and 'continue' statements from C?
If you have an outer loop over things and an inner one over formulae, then 'break' out of the inner one
if a test returns false. After the inner loop, check if the last test was false or true, if false, then 'continue'
to the next x.

Ah, reading your description, it looks like you have the outer loop over the tests and the inner loop over the things? Is that neccessary? If so you need to keep a list of things that have passed all the tests so far, which, for each test, you go through and remove those that fail the test. At the end you are left with a list of all the things that have passed all the tests. Java must have lists, doesn't it?

(no subject)

Date: 2007-08-04 09:04 am (UTC)
From: [identity profile] foradan.livejournal.com
Grrr. LJ removed the indenting from my python code.

Profile

purplecat: Hand Drawn picture of a Toy Cat (Default)
purplecat

May 2025

S M T W T F S
    1 2 3
4 56789 10
111213 141516 17
18192021222324
25 262728293031

Tags

Style Credit

Expand Cut Tags

No cut tags