caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Brian Rogoff <bpr@best.com>
To: Miles Egan <miles@caddr.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] lisp -> ocaml
Date: Tue, 22 May 2001 10:09:37 -0700 (PDT)	[thread overview]
Message-ID: <Pine.BSF.4.21.0105220958080.20798-100000@shell5.ba.best.com> (raw)
In-Reply-To: <20010522093341.A97425@caddr.com>

On Tue, 22 May 2001, Miles Egan wrote:
> Which fails to compile, for obvious reasons.  Is the solution to refactor the
> code into a nonrecursive form? 

In Caml you declare mutually recursive functions and types with a
"rec" and an "and" 

let rec apply_op op = ...
and achieve goal ops = ...

You can also use the same syntax to emulate "where" clauses of Haskell and
other FPLs. 

> 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:

One thing you can do is write polymorphic versions of the OCaml library
set functor, which you'll need anyways as soon as you want to have a type 
recursive with a functor instantiation. Insert long whining and sobbing
here about how this is a pain :-).

For this problem though, it seems that you just want nullary constructors
of a sum type to behave as integers, as in C or Ada. Easy enough with a 
bit of boilerplate code. 

> type t = ONE | TWO | THREE
> 
> as "ONE", "TWO", "THREE".

let pos = function ONE -> 1 | TWO -> 2 | THREE -> 3
let image = function ONE -> "uno" | TWO -> "dos" | THREE -> "tres"

> I'm using strings in the meantime but this isn't very satisfying.

Indeed.

-- Brian


-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


  parent reply	other threads:[~2001-05-22 17:09 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-05-22 16:33 Miles Egan
2001-05-22 16:52 ` Markus Mottl
2001-05-22 17:09 ` Brian Rogoff [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.BSF.4.21.0105220958080.20798-100000@shell5.ba.best.com \
    --to=bpr@best.com \
    --cc=caml-list@inria.fr \
    --cc=miles@caddr.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).