caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] lisp -> ocaml
@ 2001-05-22 16:33 Miles Egan
  2001-05-22 16:52 ` Markus Mottl
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Miles Egan @ 2001-05-22 16:33 UTC (permalink / raw)
  To: caml-list

For my own edification I've been translating some of the code from Norvig's
PAIP AI text to get an idea of what this kind of code looks like in OCaml and
I've come up against two small problems.

First, I have two mutually recursive function definitions:

let apply_op op =
  if (Stateset.for_all achieve op.op_preconds) then
    begin
      print_endline ("executing " ^ op.op_action);
      global_state := Stateset.diff !global_state op.op_dellist;
      global_state := Stateset.union !global_state op.op_addlist;
      true
    end
    else
      false

let achieve goal ops =
  Stateset.mem goal global_state or
  List.exists apply_op (List.filter (appropriate_p goal) ops)

Which fails to compile, for obvious reasons.  Is the solution to refactor the
code into a nonrecursive form?  In the absence of forward declarations, I'm
not sure what else to do.

Second, the PAIP code makes fairly heavy use of Lisp's symbolic features and
uses symbols as a kind of type tag but also as printable strings.  I've been
using variants, both traditional and polymorphic, as a substitute, but they're
not really quite equivalent.  For example, one of the first programs is a
simple implementation of the old GPS (general problem solver), which
manipulates sets of states.  Lisp provides set operations on lists and allows
printing of symbols, which makes it possible to both manipulate "state" lists
and print them with very little code.  I can't use variants with the same
flexibility because I have to provide an explicit ordering if I want to use
them as set members and I can't print them because there doesn't seem to be a
way to print something like:

type t = ONE | TWO | THREE

as "ONE", "TWO", "THREE".

I'm using strings in the meantime but this isn't very satisfying.                                                                               
-- 
miles
-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2001-05-28 19:10 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-22 16:33 [Caml-list] lisp -> ocaml Miles Egan
2001-05-22 16:52 ` Markus Mottl
2001-05-22 17:09 ` Brian Rogoff
2001-05-22 18:27 ` Remi VANICAT
2001-05-22 17:12   ` Miles Egan
2001-05-22 18:26     ` Chris Hecker
2001-05-27 13:01 ` Xavier Leroy
2001-05-27 14:43   ` Miles Egan
2001-05-27 21:24   ` Dave Mason
2001-05-28 17:10     ` William Chesters
2001-05-28  0:06   ` Chris Hecker
2001-05-28 13:32     ` Xavier Leroy
2001-05-28 19:02       ` Chris Hecker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).