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
next prev 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