I am trying to use the debugger in PolyML but always get errors.  Here is
my code:

PolyML.Compiler.debug := true;
open PolyML.Debug;
fun member(x,[]) = false
  | member(x,(y::ys)) = if x = y then true else member(x,(ys));
member(2,[2,3,4]);  (* expect true  *)
member(5,[2,3,4]);  (* expect false  *)
fun subset([],s) = true
  | subset((x::xs),s) = member(x,s) andalso subset(xs,s);
fun equals(s1,s2) = subset(s1,s2) andalso subset(s2,s1);
breakIn "subset";

subset([],[1,2,3]);   (* expect true  *)
subset([2],[1,2,3]);  (* expect true  *)

It does break at the debug prompt, but when typing

dump();

it crashes with:  Function subset:Exception- Cast "toAddress" raised

Do you have any suggestions?

I am using Debian 9  64-bit and installed using apt-get

"polyml is already the newest version (5.6-8)"

-Dave


On Thu, Jan 15, 2015 at 3:54 PM David Topham <dtop...@gmail.com> wrote:

> After more experimenting with GUI in SML, I would like to now try calling
> an SML module from a C program. That way, the GUI could be built using
> traditional imperative techniques and the program logic could be written in
> SML. I see how to call a C function from SML, but and not so clear on how
> to call an SML function from a C program. I want to build code using polyc
> and then link with a C main program, but could anyone show me a simple
> example of calling that function and getting its return value?  for
> example, I have defined:
>
> fun sum i n f = if i > n
>                         then 0.0
>                         else f i + sum (i+1) n f ;
> fun int2real x = real x ;
>
> in linkToC.sml
>
> and
>
> #include <iostream>
> #include <fstream>
> std::ofstream ofs;
> int main()
> {
>   std::cout << sum(1,10,int2real) << std::endl;
>   ofs.open("table.dat");
>   for(int i = 0; i < 20; i++)
>      ofs << i << '\t' << sum(1,i,int2real) << std::endl;
> }
>
> in linkToC.cpp
>
> Looking in the polyc script, I thought adding the -c option might allow me
> to build
> the object code which I could then link to the sml functions, but it
> complains about
> not having a main.
>
> Could someone point me in the right direction?  Thanks, Dave
>
>
> On Mon, Dec 15, 2014 at 11:44 AM, David Topham <dtop...@gmail.com> wrote:
>
>> David, Thank you so much! I really appreciate your help with this. Your
>> sample below builds fine with polyc on my system (PolyML 5.5.2). I am using
>> a minimal Linux distribution named TinyCore (
>> http://distro.ibiblio.org/tinycorelinux/) which comes with OpenMotif
>> 2.3.3  It runs in a virtual machine within another computer only taking up
>> a few hundred MBs!
>>
>> I am going to use it to help my students explore Discrete Math next
>> semester (this textbook uses SML for that purpose:
>> http://cs.wheaton.edu/~tvandrun/dmfp/).
>>
>> I also found a reasonably current project using PolyML and Motif here:
>> http://www.lemma-one.com/ProofPower/index/
>>
>> ...however it was built on PolyML 4 and has not yet been ported to the
>> newer version (e.g. depends on PolyML.commit which no longer seems to be
>> supported).
>>
>> Happy Holidays to everyone in the PolyML community!
>>
>> -David Topham
>>
>>
>>>    Re: GUI Interface (David Matthews)
>>>
>>> I've experimented with building a stand-alone executable with Motif and
>>> succeeded in getting it to work for me using polyc.  (It required
>>> building Poly/ML with --with-x).  I took the example from
>>> http://www.polyml.org/docs/Motif.html and wrapped it up in a function.
>>> I did find a problem, though.  It looks as though the function has to
>>> suspend itself with something like Posix.Process.pause otherwise nothing
>>> happens.  I seem to recall that the Motif stuff is handled on a separate
>>> thread to allow the REPL to continue to accept commands.  With a
>>> stand-alone application there isn't a REPL so without the "pause" it
>>> terminates immediately.
>>>
>>> David
>>>
>>> open XWindows ;
>>> open Motif ;
>>>
>>> fun main() =
>>> let
>>> val shell =
>>>      XtAppInitialise "" "xed" "Editor" [] [XmNwidth 400, XmNheight 400] ;
>>>
>>> val main = XmCreateMainWindow shell "main" [] ;
>>>
>>> val bar = XmCreateMenuBar main "bar" [] ;
>>>
>>> val fileMenu = XmCreateCascadeButton bar "file" [XmNlabelString "File"] ;
>>> val editMenu = XmCreateCascadeButton bar "edit" [XmNlabelString "Edit"] ;
>>> val viewMenu = XmCreateCascadeButton bar "view" [XmNlabelString "View"] ;
>>> val helpMenu = XmCreateCascadeButton bar "help" [XmNlabelString "Help"] ;
>>>
>>> val command = XmCreateText main "command" [XmNeditMode
>>> XmSINGLE_LINE_EDIT] ;
>>>
>>> val hscroll = XmCreateScrollBar main "hscroll" [XmNorientation
>>> XmHORIZONTAL] ;
>>> val vscroll = XmCreateScrollBar main "vscroll" [XmNorientation
>>> XmVERTICAL] ;
>>>
>>> val work = XmCreateDrawingArea main "work" [] ;
>>> in
>>>
>>> XtManageChildren [fileMenu, editMenu, viewMenu, helpMenu] ;
>>> XtManageChildren [bar, command, hscroll, vscroll, work] ;
>>>
>>> XmMainWindowSetAreas main bar command hscroll vscroll work ;
>>>
>>> XtManageChild main ;
>>> XtRealizeWidget shell;
>>> Posix.Process.pause()
>>> end;
>>>
>>>
>>> ------------------------------
>>>
>>> _______________________________________________
>>> polyml mailing list
>>> polyml@inf.ed.ac.uk
>>> http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
>>>
>>> End of polyml Digest, Vol 110, Issue 12
>>> ***************************************
>>>
>>> --
>>> The University of Edinburgh is a charitable body, registered in
>>> Scotland, with registration number SC005336.
>>>
>>>
>
_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to