<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.ai.prolog.swi">
    <title>gmane.comp.ai.prolog.swi</title>
    <link>http://blog.gmane.org/gmane.comp.ai.prolog.swi</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16803"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16802"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16801"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16800"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16799"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16798"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16797"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16796"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16795"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16794"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16793"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16792"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16791"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16790"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16789"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16788"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16787"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16786"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16785"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16784"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16803">
    <title>Fw:  ~&gt;</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16803</link>
    <description>&lt;pre&gt;(Sorry Jan, didn't mean to send only to you.)

 Trying this.  The following code fails when call(Handler...) throws an exception (because the other end dropped the link).  Instead of closing the connection, close_connection complains that In is unbound.  But it was bound before the call went out.  Is the flaw here, or elsewhere?



process_client(Socket, _Peer, Handler) :-
    (  tcp_open_socket(Socket, In, Out)
    ~&amp;gt; close_connection(In, Out)  )
    , call(Handler, In, Out)
    .
 
Alan Baljeu


From: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt;

To: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt; 
Sent: Tuesday, May 22, 2012 11:04:40 AM
Subject: Re: [SWIPL] ~&amp;gt;
 
On 05/22/2012 04:46 PM, Alan Baljeu wrote:

Except that it leaves a choice point.  Of course, there is some
danger here that a later release is smart enough to delete this ...'

In my view, relying on non-determinism in setup_call_cleanup/3 is also 
the weak point of ~&amp;gt;.   The idea is to do

    open(File, read, In) ~&amp;gt; close(In),
    process(In),
    !            % this is what closes In

Forgetting the closing ! can leave the file open or close it much
later if the calling code commits or backtracks.

You also cannot read things like:

xyz :-
    open(File, read, In) ~&amp;gt; close(In),
    read(In, version(5.0)), !,
    process(In),
    !.
xyz :-
    ...

because the first ! will close the file.

That said, it is nicer if you have multiple resources to take care
of:

    open(FileIn, read, In) ~&amp;gt; close(In),
    open(FileOut, write, Out) ~&amp;gt; close(Out),
    process(In, Out), !.

This is more
 pleasant to the eyes than this:

    setup_call_cleanup(
        open(FileIn, read, In),
        setup_call_cleanup(
        open(FileOut, write, Out),
        process(In, Out),
        close(Out)),
        close(Out)).

Note that this is *incorrect*:

    setup_call_cleanup(
        ( open(FileIn, read, In),
          open(FileOut, write, Out)
        ),
        process(In, Out),
        ( close(In),
          close(Out)
        )).

It leaks In if opening FileOut fails and it leaks Out if closing
In
 fails.

    Cheers --- Jan

-------------- next part --------------
HTML attachment scrubbed and removed
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-22T15:21:12</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16802">
    <title>setup_call_(catcher)_cleanup</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16802</link>
    <description>&lt;pre&gt;I imagined these would be equivalent unless an exception occurs, but the former quits while the latter works.  What's going on?

create_client(Host, Port) :-
        setup_call_cleanup(tcp_socket(Socket),
                                   tcp_connect(Socket, Host:Port),
                                   tcp_close_socket(Socket)),
        setup_call_cleanup(tcp_open_socket(Socket, In, Out),
                           chat_to_server(In, Out),
                           close_connection(In, Out)).

create_client(Host, Port) :-
        setup_call_catcher_cleanup(tcp_socket(Socket), %% different
                                   tcp_connect(Socket, Host:Port),
                                   exception(_), %% different
                                   tcp_close_socket(Socket)),
        setup_call_cleanup(tcp_open_socket(Socket, In, Out),
                           chat_to_server(In, Out),
                           close_connection(In, Out)).
 
Alan Baljeu
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-22T15:03:41</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16801">
    <title>Re: ~&gt;</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16801</link>
    <description>&lt;pre&gt;(true ; fail) is pretty much the same as (true), isn't it?

 
Alan Baljeu


From: Jeff Rosenwald &amp;lt;jeffrose&amp;lt; at &amp;gt;aol.com&amp;gt;


~&amp;gt;(P, Q) :-
    setup_call_cleanup(P,
               (true; fail),
               (   Q -&amp;gt; true;
               throw(error(goal_failed(Q), context(~&amp;gt;, _))))
              ).

Regards,
Jeff R.
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-22T14:46:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16800">
    <title>Re: [JPL] some exec trouble and questions</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16800</link>
    <description>&lt;pre&gt;
What book would that be?

(I have no clue about your question, probably that's because I'm
missing this book 8^)

Cheers
P.

========

_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
&lt;/pre&gt;</description>
    <dc:creator>Pierpaolo Bernardi</dc:creator>
    <dc:date>2012-05-21T08:29:10</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16799">
    <title>JPL problem (Prolog from within Java)</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16799</link>
    <description>&lt;pre&gt;
Hi,

I just installed a fresh copy of SWI-Prolog 6.0.2, and I cannot seem to get JPL 
to work. Calling Java from Prolog works fine, but the other way around gives 
the typical error

 .../libjpl.so: undefined symbol: PL_is_initialised

I'm invoking java with the -Djava.library.path set correctly, the environment 
variable SWI_HOME_DIR is set correctly, and jpl.jar is of course in the 
classpath.

I've tried compilation both with and without the "--enable-shared" option, but 
it does not make a difference. I've tried putting symlinks to libswipl.so* in 
/usr/lib/ (just to be sure it can be found), but that also does not help.

It is a fresh Ubuntu 12.04 install, x86_64 architecture.

Any help would be appreciated.


Best regards,
-Jon.

Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
&lt;/pre&gt;</description>
    <dc:creator>Jon Sneyers</dc:creator>
    <dc:date>2012-05-20T14:33:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16798">
    <title>Re: ~&gt;</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16798</link>
    <description>&lt;pre&gt;Hi Alan:

This is one of my inventions. It is a shorthand for set-call-cleanup that has no real call. It allows the program to proceed in a linear fashion and even return to its caller, accumulating cleanups along the way. The only real difference is that the RHS (cleanup) clause must succeed or else a goal_failed exception is thrown.  Ps execute from top to bottom and Qs execute from bottom up. Cleanups are triggered on backtracking on fail into ~&amp;gt;, cut of choice points, or receipt of an uncaught exception.

This has the advantage of guaranteeing that the fixed resource that you just allocated (in a library function) and are about to return to your user (in an application) will get properly handled inexorably, regardless of what the user does with it, provided that the user's program eventually terminates (without a core dump). It is simply impossible for it to be otherwise.

 

 % %    ~&amp;gt;(:P, :Q) is semidet.
% %     eventually_implies(P, Q) is semidet.
%    asserts temporal Liveness (something good happens, eventually) and
%    Safety (nothing bad ever happens) properties. Analogous to the
%    "leads-to" operator of Owicki and Lamport, 1982. Provides a sort of
%    lazy implication described informally as:
%
%    * Liveness: For all possible outcomes, P -&amp;gt; Q, eventually.
%    * Safety: For all possible outcomes, (\+P ; Q), is invariant.
%
%  Described practically:
%
%    P ~&amp;gt; Q, declares that iff P is true, then Q must be true, from now on.
%

:- meta_predicate ~&amp;gt;(0,0).
:- op(950, xfy, ~&amp;gt;).

~&amp;gt;(P, Q) :-
    setup_call_cleanup(P,
               (true; fail),
               (   Q -&amp;gt; true;
               throw(error(goal_failed(Q), context(~&amp;gt;, _))))
              ).

Some people like it and some don't. Since I started using it, I have never mishandled or orphaned a fixed resource.

Regards,
Jeff R.

 

-----Original Message-----
From: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt;
To: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt;; Prolog &amp;lt;swi-prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de&amp;gt;
Sent: Thu, May 17, 2012 3:17 pm
Subject: Re: [SWIPL] ~&amp;gt;


The code in question said 


  open(Filename, Stream, etc) ~&amp;gt; close(Stream)


 
Alan Baljeu



From: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt;

To: Prolog &amp;lt;swi-prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de&amp;gt; 
Sent: Thursday, May 17, 2012 10:22:18 AM
Subject: [SWIPL] ~&amp;gt;
 
I saw an example on this thread this week.  It looks useful.  What and where is 
it?
 

Alan Baljeu
-------------- next part --------------
HTML attachment scrubbed and removed
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog

 
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Jeff Rosenwald</dc:creator>
    <dc:date>2012-05-19T12:46:07</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16797">
    <title>WLPE 2012 - Call for Papers</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16797</link>
    <description>&lt;pre&gt;[Apologies for multiple copies...]

-----------------------------------------------------------

               WLPE 2012 - CALL FOR PAPERS

            Workshop on Logic-based Methods in
                  Programming Environments

             (satellite workshop of ICLP 2012)

                     September 8, 2012
                     Budapest, Hungary

         http://users.dsic.upv.es/workshops/wlpe2012/
-----------------------------------------------------------

The workshop aims at providing an informal meeting for researchers
working on logic-based tools for development and analysis of programs.
In addition to papers describing more conceptual work on environmental
tools, we solicit papers describing the implementation of and
experimentation with such tools.

We hope to attain the same friendly atmosphere as in past workshops, which
enabled fruitful exchanges leading to joint research and subsequent
publications.

Areas particularly relevant to the workshop include:

  * static and dynamic analysis
  * debugging and testing
  * program verification and validation
  * code generation from specifications
  * termination and non-termination analysis
  * reasoning on occurs-check freeness and determinacy
  * frameworks and resources for sharing in the logic programming community
  * profiling and performance analysis
  * type- and mode analysis
  * shape, point-to and escape analysis
  * module systems
  * optimization tools
  * program understanding
  * refactoring
  * logical meta-languages

Note that this list is not exhaustive and, if you are interested in
taking part in the workshop but unsure if your work falls within its
scope, do contact the organisers who will be happy to advise.

The 22nd Workshop on Logic-based methods in Programming Environments
will take place in Budapest, Hungary, as a satellite workshop
of ICLP 2012, the 28the International Conference on Logic Programming.
This workshop will continue the series of successful international
workshops on logic programming environments held in Ohio, USA (1989),
Eilat, Israel (1990), Paris, France (1991), Washington, USA (1992),
Vancouver, Canada (1993), Santa Margherita Ligure, Italy (1994),
Portland, USA (1995), Leuven, Belgium and Port Jefferson, USA (1997),
Las Cruces, USA (1999), Paphos, Cyprus (2001), Copenhagen, Denmark
(2002), Mumbai, India (2003), Saint Malo, France (2004), Sitges,
Spain (2005), Seattle, Washington USA (2006), Porto, Portugal (2007),
Udine, Italy (2008), Pasadena, USA (2009), Edinburgh, UK (2010), and
Odense, Denmark (2011).

This year WLPE will be coordinated with CICLOPS. In particular, there will
be two special events organised: (a) SWI-25, a celebration and
retrospective of the open source SWI-Prolog engine on the occasion of
its 25th birthday, and (b) OpenPL, an event on (1) coordinating
efforts towards furthering cross-engine compatibility, with a focus on
libraries and add-on packages, and (2) the creation of a user-contributing
repository of Prolog code.

Submission guidelines
---------------------

We encourage the submission of original research in the area as well as
relevant results that have been submitted, rejected, or accepted elsewhere
as long as they are relevant for the WLPE community.

All papers must be written in English and should not exceed 15 pages. We
welcome also shorter submissions, e.g., extended abstracts and short
papers, of at least 3 pages.

Papers should be submitted electronically via the submission page:

     https://www.easychair.org/conferences/?conf=wlpe2012

An informal proceedings will be distributed electronically at the workshop.
After the workshop, the proceedings will be publicly available on-line in
the Computing Research Repository (CoRR).

Important dates
---------------

  Submission:   June 20, 2012
  Notification: July 16, 2012
  Camera-ready: July 27, 2012
  Workshop:     September 8, 2012

Workshop organizers
-------------------

     Win Vanhoof
     Faculty of Computer Science
     University of Namur
     Namur, Belgium
     Email: wlpe2012&amp;lt; at &amp;gt;dsic.upv.es

     Alicia Villanueva
     Department of Computer Science (DSIC)
     Universitat Politècnica de València
     Valencia, Spain
     Email: wlpe2012&amp;lt; at &amp;gt;dsic.upv.es

Program committee
-----------------

Salvador Abreu Universidade de Évora, Portugal
Petra Hofstedt University of Technology Berlin, Germany
Jacob Howe City University London, UK
Yoshitaka Kameya Tokyo Institute of Technology, Japan
Roland Kaminski Universität Postdam, Germany
Lunjin Lu Oakland University, USA
Alexander Serebrenik Eindhoven University of Technology, The Netherlands
Peter Schneider-Kamp University of Southern Denmark, Denmark
Zoltan Somogyi University of Melbourne, Australia
Win Vanhoof University of Namur, Belgium
Alicia Villanueva Universitat Politècnica de València, Spain
Damiano Zanardini Universidad Politécnica de Madrid, Spain

&lt;/pre&gt;</description>
    <dc:creator>Wim Vanhoof</dc:creator>
    <dc:date>2012-05-18T19:48:48</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16796">
    <title>[JPL] some exec trouble and questions</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16796</link>
    <description>&lt;pre&gt;Hello Dear «Blue Book» lovers,

I came to integrate the connection between Prolog &amp;amp; SWI-Prolog. 
Everything's working well yet.
For feeding my knowledge base I was pushing into a file, then later 
evaluating this file.

so, with bw beeing a streamWriter:
bw.append( myFact.toLowerCase() + "('" + myThing + "').\n" ) ;

Even doing so on a tmpFS, I think I would gain performance creating them 
directly through the connector.

So - and this is were my problem arise - I replaced my small lines to 
write into a file and evaluate it as my knowledge base, to push all my 
facts directly like this:

       jpl.Compound goal = new Compound(
           fact.toLowerCase(),
           new jpl.Term[] {
             new Atom(myThing)
           });
       System.out.println( "rule crafted: " +  goal.toString() ) ;
       jpl.Query q = new jpl.Query( goal ) ;

But, that produces such kind of errors:

[-] : PrologException: error(existence_error(procedure, /(father, 1)), 
context(:(system, /('$c_call_prolog', 0)), _1))
rule crafted: father('William')


I'd like to understand what's my problem in using the second way to 
query &amp;amp; fill my knowledge's base
Regards,

Alex

&lt;/pre&gt;</description>
    <dc:creator>Alexandre Hélias</dc:creator>
    <dc:date>2012-05-18T16:11:14</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16795">
    <title>CICLOPS 2012: Call for Papers</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16795</link>
    <description>&lt;pre&gt;
--------------------------------------------------------------
              CICLOPS 2012 - Call for Papers

       12th International Colloquium on Implementation of
         Constraint and LOgic Programming Systems

                  ICLP 2012 Workshop

                  4th September 2012
                  Budapest, Hungary

            http://www.cs.unipr.it/ciclops12/
           Submission deadline: June 20, 2012
--------------------------------------------------------------


This workshop aims at discussing and exchanging experience on the design, implementation, and
optimisation of logic, constraint (logic) programming systems, and other systems based on logic
as a means to express computations. Experience backed up by real implementations and their
evaluation will be given preference, as well as descriptions of work in progress in that direction.

Topics of interest include, but are not limited to:

- Sequential implementation schemes (abstract machines, translation to other languages, etc.).
- Implementation of concurrent and distributed logic and constraint programming systems.
- Type inference and type checking systems for CLP languages.
- Compile-time analysis and its application to code generation.
- Balance between compile-time effort and run-time machinery, dynamic compilation.
- Interaction between high-level optimisations/transformations/specialisation and low-level issues.
- Memory management and garbage collection issues.
- Indexing techniques and optimisations for large size programs.
- Optimisations for program generated logic and constraint programs.
- Implementation of logic engines in functional and object oriented languages.
- Embedding of logic and constraint programming engines in multi-paradigm systems.
- Techniques for alternative logic engines and inference mechanisms (ASP, SAT, QSAT, DL etc.).
- Extensions to the inference engine such as stochastic, probabilistic and quantitative elements.
- Theorem provers, proof assistants and logic based natural language processing systems.
- Implementation of object and agent-oriented extensions.
- Inductive logic programming.
- Object and module systems.
- Design and implementation of declarative I/O concepts.
- Implementations and ports of CLP systems for mobile devices.
- Documenting, debugging, testing, and profiling tools.
- Implementations of learning algorithms in logical environments.
- Interfaces and their applications to other languages and systems, eg. Java, web and databases.
- Cross engine compatibility and user-enabled development.

------------------------------
Workshop Goals

Our intent is to bring together, in an informal setting, people
involved in research on sequential and parallel implementation
technologies for logic and constraint programming languages and
systems, in order to promote the exchange of ideas and feedback on
recent developments. We hope that the workshop will provide a meeting
point for people working on implementation technology for different
aspects of logic and constraint-based languages and systems. 
We will foster and encourage discussions on the future of LP 
implementations with focus on extensions, standards, libraries, 
user-driven development and identification of key research and 
application areas.

This year CICLOPS will be coordinated with WLPE. In particular, there will
be two special events organised: (a) SWI-25, a celebration and
retrospective of the open source SWI-Prolog engine on the occasion of
its 25th birthday, and (b) OpenPL, an event on (1) coordinating
efforts towards furthering cross-engine compatibility, with a focus on
libraries and add-on packages, and (2) the creation of a
user-contributing repository of Prolog code.

------------------------------
Submission Information

Authors are invited to submit PDF files of papers written in English and
not exceeding 15 pages using LNCS LaTeX format. Shorter submissions are also welcome,
e.g. extended abstracts and short papers of at least 3 pages.

Papers should be submitted electronically via : 

   https://www.easychair.org/conferences/?conf=ciclops12

------------------------------
Proceedings

We plan for the informal workshop proceedings to be available on-line
at the Computing Research Repository after the workshop. An electronic
copy will also be distributed during the conference. 

------------------------------
Important Dates

Submission deadline: June 20, 2012
Notification of authors: July 16, 2012
Camera-ready copy due: July 27, 2012
Workshop date: Tuesday September 4, 2012

------------------------------
Invited Speaker

Tom Schrijvers (University of Ghent, Belgium)

------------------------------
History

CICLOPS'11 continues a tradition of successful workshops on
Implementations of Logic Programming Systems, previously held in
Budapest (1993) and Ithaca (1994), the Compulog Net workshops on
Parallelism and Implementation Technologies held in Madrid (1993 and
1994), Utrecht (1995) and Bonn (1996), the Workshop on Parallelism and
Implementation Technology for (Constraint) Logic Programming Languages
held in Port Jefferson (1997), Manchester (1998), Las Cruces (1999),
and London (2000), and more recently the Colloquium on Implementation
of Constraint and LOgic Programming Systems in Paphos (2001),
Copenhagen (2002), Mumbai (2003), Saint Malo (2004), Sitges (2005),
Seattle (2006), Porto (2007), Udine (2008), Pasadena (2009), Edinburgh
(2010) - together with WLPE, Lexington (2011).

------------------------------
Program committee

Mats Carlsson, SICS, Sweden
Daniel Diaz,  University of Paris, France
Rémy Haemmerlé, Universidad Politécnica de Madrid, Spain
Günter Kniesel, University of Bonn, Germany
Paulo Moura, Porto and University of Beira Interior, Portugal
Ricardo Rocha, University of Porto, Portugal
Guido Tack, Monash University, Australia
Paul Tarau, University of North Texas, USA
Markus Triska, Vienna University of Technology, Austria
Jan Wielemaker, Free University of Amsterdam, The Netherlands
Neng-Fa Zhou, Brooklyn College, USA

------------------------------
Workshop Coordinators

Nicos Angelopoulos, Netherlands Cancer Institute, The Netherlands
Roberto Bagnara, University of Parma, Italy

_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
&lt;/pre&gt;</description>
    <dc:creator>Nicos</dc:creator>
    <dc:date>2012-05-18T07:44:13</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16794">
    <title>Re: SWI Prolog 6.1.4 for MacOSI</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16794</link>
    <description>&lt;pre&gt;
I typically consider reports on slow-downs as complaints :-)


yes.


As you have all of them, try yourself.  Just enable/disable
#define O_LABEL_ADDRESSES 1 in the generated config.h, do
make clean &amp;amp;&amp;amp; make and you have a new version.  It is indeed
quite weird.  C optimization is responsible for less than
a factor 2 (depending on CPU and compiler).  I posted a
few times about this after Apple made this move.


Odd.  I'll try monday on a Mac.


42 Mb core for the server.  That is a lot cheaper than the paper
to print the manual and you get an integrated view on the packages,
search and autocomplete for free :-)


That is a bug related to changes in exception printing code.  For
the same reason, non-error exceptions are printed twice.  Need to
find a clean solution.


Can you provide the whole program?  Often, the details matter a lot.
This might relate to a similar report from Ulrich, which also shows
some behaviour after ^C that shouldn't happen.  Maybe this one is
easier to diagnose.

Cheers --- Jan

&lt;/pre&gt;</description>
    <dc:creator>Jan Wielemaker</dc:creator>
    <dc:date>2012-05-18T07:39:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16793">
    <title>Re: SWI Prolog 6.1.4 for MacOSI</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16793</link>
    <description>&lt;pre&gt;
On 17/05/2012, at 8:38 PM, Jan Wielemaker wrote:
This was just a report, not a complaint.


I constructed this C function:

void f(void (*g)(void), void (*h)(void), int i) {
    static void * const table[] = {&amp;amp;&amp;amp;L1, &amp;amp;&amp;amp;L2};
    goto *table[i];
L1: g(); return;
L2: h(); return;
}       

I compiled it with gcc-4.2 (which is 'traditional gcc') and cc (which
is LLVM gcc version 4.2 on my machine).  So the only difference should
be gcc-vs-LLVM.

gcc code:
       movslq  %edx,%rdx
       leaq    _table.1917(%rip), %rax
       jmp     *(%rax,%rdx,8)

        .align 4,0x90
L2:; my L1
        movq    %rdi, %r11
        movq    -16(%rbp), %rbx
        movq    -8(%rbp), %r12
        leave
        jmp     *%r11 
...

        .align 4,0x90
L3:; my L2
        movq    -16(%rbp), %rbx
        ...

llvm code:
        movslq  %edx, %rax
        leaq    _table.1466(%rip), %rcx
        jmpq    *(%rcx,%rax,8)

Ltmp2:
        popq    %rbp
        jmpq    *%rdi  # TAILCALL
Ltmp3:
        popq    %rbp
        jmpq    *%rsi  # TAILCALL


We see two differences here.
(2) The code for tail calls is a lot simpler;
the new back end seems to be taking better
advantage of x86-64.
(1) The old gcc takes care to align the branch
targets, while the llvm one does not.  That
could easily account for 10% but not 20 times.

I suspect that the difference is something as
simple as llvm hoping that goto * won't occur
and switching off most optimisation if it does.
Although that shouldn't be 20 times either.

As it happens, I _have_ gcc 4.6.

It was the installer that told me to call manpce in order
to use help.  When I did that, the problem went away.


I have other things to do with the memory on my laptop than spend
it running a web server just to display a few lines of text!
I guess it's time to print a hard copy of the manual.

I'm having no success reproducing it.
There is one thing about Ctrl-C handling which is irritating.

?- time(count(20, plain_permutation, Count)).
^CAction (h for help) ? abort
% 48,449,253 inferences, 8.824 CPU in 10.536 seconds (84% CPU, 5490669 Lips)
ERROR: Unhandled exception: Execution Aborted
% Execution Aborted


Why the ERROR line?  There is no error here, the system is doing
EXACTLY what I asked it to.  And why tell me twice that execution
was aborted?
 

Ah, DID IT!  I reproduced the crash.
?- time(count(12,plain_permutation,Count)).
[[[ wait for a count of 12 ]]]
^C
SWI-Prolog [thread 1]: received fatal signal 11 (segv)
Stack trace labeled "crash":
  [0] 0   libswipl.dylib                      0x00000001000ae473 save_backtrace + 67
  [1] 1   libswipl.dylib                      0x00000001000ae530 crashHandler + 64
  [2] 2   libswipl.dylib                      0x000000010006719a dispatch_signal + 986
  [3] 3   libSystem.B.dylib                   0x00007fff82bbe1ba _sigtramp + 26
  [4] 4   libswipl.dylib                      0x0000000100024e7a valueExpression + 986
  [5] 5   libswipl.dylib                      0x000000010004fb93 query_loop + 275
  [6] 6   libswipl.dylib                      0x000000010004fd2a prologToplevel + 74
  [7] 7   libswipl.dylib                      0x0000000100009bd7 PL_toplevel + 39
  [8] 8   swipl                               0x0000000100000e43 main + 67
  [9] 9   swipl                               0x0000000100000df4 start + 52
Abort trap

count/3 is pretty much copied from the nb_setarg/3 documentation.
plain_permutation(12, _) generates a permutation of 1..12 using
(a copy of) perm/2.  I can't make the crash happen if I type Ctrl-C
too soon after issuing the query.  Provided I wait long enough,
the crash seems to be fairly repeatable.


&lt;/pre&gt;</description>
    <dc:creator>Richard O'Keefe</dc:creator>
    <dc:date>2012-05-18T06:14:35</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16792">
    <title>Re: ~&gt;</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16792</link>
    <description>&lt;pre&gt;The code in question said 


  open(Filename, Stream, etc) ~&amp;gt; close(Stream)


 
Alan Baljeu



From: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt;

To: Prolog &amp;lt;swi-prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de&amp;gt; 
Sent: Thursday, May 17, 2012 10:22:18 AM
Subject: [SWIPL] ~&amp;gt;
 
I saw an example on this thread this week.  It looks useful.  What and where is it?
 

Alan Baljeu
-------------- next part --------------
HTML attachment scrubbed and removed
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-17T19:16:10</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16791">
    <title>~&gt;</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16791</link>
    <description>&lt;pre&gt;I saw an example on this thread this week.  It looks useful.  What and where is it?
 

Alan Baljeu
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-17T14:22:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16790">
    <title>Re: SWI Prolog 6.1.4 for MacOSI</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16790</link>
    <description>&lt;pre&gt;Hi Richard,

[Cc to the list as more people might wonder.]

On 05/17/2012 12:02 AM, Richard O'Keefe wrote:

Xcode went from traditional gcc to gcc-llvm. I guess you know that.
Unfortunately, gcc-llvm "goto *var" is broken (that is, it works, but
the result is 20 *times* slower; no clue how you get that done). So, we
drop the usage of goto *var, which implies a slowdown of nearly 10%.
Then llvm is a bit better in the rest of the optimization.

This binary is compiled kindly by a user (Jochem Liem). It is a bit much
to ask him to install gcc first. If you want full performance, install
gcc 4.6 and configure using --enable-profile.  That is likely to make
the system 10-15% faster compared to what you have now.

P.s. also the introduction of just-in-time indexing can cause a slowdown
of a few percent. On most programs that is more than compensated for if
it finds only a tiny bit for which it can provided additional indexing,
but authors who were very keen on first argument indexing will just
loose a little.  In fact, writing the program more naively might make
it faster :-)


There should be no reason to call manpce first.  At least, there
isn't on Linux and Windows.  Anyone else experiencing this?  That
said, I've not used the built-in manual for a long time.  I
always use the online version.  If I'm not online, I have a clone
of plweb.git (the website), and all one needs to do is (in plweb):

swipl -s load.pl
?- server.

And have the manual at localhost:3040.


This is rather odd. The ^C handler merely sets a flag and returns. The
flag is picked up synchronously, like awoken delayed goals, thread
signals, etc.

Anyway, if it can be repeated it is interesting.  Else there is
little I can do.

Cheers --- Jan

&lt;/pre&gt;</description>
    <dc:creator>Jan Wielemaker</dc:creator>
    <dc:date>2012-05-17T08:38:01</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16789">
    <title>Re: odbc problem</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16789</link>
    <description>&lt;pre&gt;I have decided to use PrologScript instead and it works ok now.
Gaya

On 08/05/12 11:09, Jan Wielemaker wrote:

&lt;/pre&gt;</description>
    <dc:creator>Gaya Nadarajan</dc:creator>
    <dc:date>2012-05-16T16:04:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16788">
    <title>Re: blob atoms</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16788</link>
    <description>&lt;pre&gt;It's working.  


Example reads D from a stream, but establishes the amount of input accepted after.


15 ?- test_data(D), (length(D, 5) ; length(D, 3) ; length(D, 6) ; length(D, 10)).
D = [115, 109, 97, 108, 108] ;
D = [115, 109, 97] ;
D = [115, 109, 97, 108, 108, 13] ;
false.

 
Alan Baljeu


From: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt;

To: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt; 
Cc: Prolog &amp;lt;swi-prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de&amp;gt; 
Sent: Monday, May 14, 2012 4:35:26 PM
Subject: Re: [SWIPL] blob atoms
 
From: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt;


As I see things, I call a C function make_my_blob(term_t), which creates
 data and does a put_blob or something into the term.  I don't know  
when "the blob is new" happens, or what should be done then.  



Yes.  For my part, the problem was I couldn't figure out a good system 
within prolog that was both proof against backtracking and would grow 
on demand.  That is, it was clearly possible, but rather headache inducing 
to manage the behavior.


Exactly.



As long as you can go back on your read, you need infinite caching.  
Once you commit, you can cut off the backtracking and start a new cache 
on your same infinite stream.  I haven't implemented such, but I could add a 
commit call to clip the existing cache.

    Cheers --- Jan
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-15T13:56:52</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16787">
    <title>Re: blob atoms</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16787</link>
    <description>&lt;pre&gt;New thought: Using 2 threads is a viable way to have non-backtracking behavior?  I don't know the means of communicating between threads but it's a thought.

 
Alan Baljeu


From: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt;

To: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt; 
Cc: Prolog &amp;lt;swi-prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de&amp;gt; 
Sent: Monday, May 14, 2012 4:35:26 PM
Subject: Re: [SWIPL] blob atoms
 
From: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt;


As I see things, I call a C function make_my_blob(term_t), which creates
 data and does a put_blob or something into the term.  I don't know  
when "the blob is new" happens, or what should be done then.  



Yes.  For my part, the problem was I couldn't figure out a good system 
within prolog that was both proof against backtracking and would grow 
on demand.  That is, it was clearly possible, but rather headache inducing 
to manage the behavior.


Exactly.



As long as you can go back on your read, you need infinite caching.  
Once you commit, you can cut off the backtracking and start a new cache 
on your same infinite stream.  I haven't implemented such, but I could add a 
commit call to clip the existing cache.

    Cheers --- Jan
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-14T21:38:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16786">
    <title>Re: blob atoms</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16786</link>
    <description>&lt;pre&gt;From: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt;


As I see things, I call a C function make_my_blob(term_t), which creates
 data and does a put_blob or something into the term.  I don't know  
when "the blob is new" happens, or what should be done then.  



Yes.  For my part, the problem was I couldn't figure out a good system 
within prolog that was both proof against backtracking and would grow 
on demand.  That is, it was clearly possible, but rather headache inducing 
to manage the behavior.


Exactly.



As long as you can go back on your read, you need infinite caching.  
Once you commit, you can cut off the backtracking and start a new cache 
on your same infinite stream.  I haven't implemented such, but I could add a 
commit call to clip the existing cache.

    Cheers --- Jan
_______________________________________________
SWI-Prolog mailing list
SWI-Prolog&amp;lt; at &amp;gt;lists.iai.uni-bonn.de
https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-14T20:35:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16785">
    <title>Position available for a Prolog programmer.</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16785</link>
    <description>&lt;pre&gt;Hi,

There is a position available for a (SWI-)Prolog programmer. I have
spent some time on the pilot phase, so I can explain the problem.

There is a legacy expert system in chemical process design that has been
designed since the late 80s. The system is huge (about 1,000,000 lines
of Prolog). It was initially written for IF/Prolog 4 on Unix/X11. It has
been ported to IF/Prolog 5 on Windows/MFC. During the pilot, we ported
most of it to SWI-Prolog using a web-based interface.

25 years of development where we now emulate IF/Prolog 5 in SWI-Prolog,
while the code emulates IF/Prolog 4 means that it is time for big-time
refactoring. This requires a quite experienced Prolog programmer who can
deal with Prolog meta-programming, which is used a lot in the emulation
layers as well as the expert system itself. Meta-programming and program
analysis skills are also needed to automate the upcomming refactoring
process.  In other words, this is a nice engineering challenge :-)

Oh, about 80% of the code is in German and thus at least passive
knowlege of German is really needed.  Rest of the facts:

About the project:
- expert system for chemical process design
- big legacy system, revival into web-interface.
- Breda, the Netherlands

What we are searching for:
- swi-prolog knowledge and experience
- english and german language
- preferrably some basic chemical engineering knowledge
- other tools: git, fortran, c, (x)html/javascript/css, (c)make, linux, etc.

Please send your reaction to romme&amp;lt; at &amp;gt;process-design-center.com

Cheers --- Jan

&lt;/pre&gt;</description>
    <dc:creator>Jan Wielemaker</dc:creator>
    <dc:date>2012-05-14T19:58:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16784">
    <title>Re: blob atoms</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16784</link>
    <description>&lt;pre&gt;
Roughly, the acquire() is called if the blob is new.   That depends
on the UNIQUE flag of the blob type.  release() is called if atom-gc
decides to remove the object.  write() and compare() should be fairly
easy, but are in general not needed.

Another source of examples is src/pl-dbref.c, dealing with clause
and recorded database references.


Interesting.  Does this mean that the C-part provides a backup of what
is read from the stream?  The problem there is of course that it may
be a little more efficient than Prolog, but not by that much.

I've considered using the current pure_input code, but using nb_setarg
to bind the next part rather than simple unification.  I still think that
should work, but I never managed to get it working :-(


That is a bit unclear.  Getting pure input to work on streams would be
really nice, but one of the nice aspects of pure input is that it can
work with limited resources on infinite streams.  I guess that is not
the case for your approach.  This still would make your approach acceptable
if it is clear there is no better way.

Cheers --- Jan
&lt;/pre&gt;</description>
    <dc:creator>Jan Wielemaker</dc:creator>
    <dc:date>2012-05-14T19:32:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16783">
    <title>Re: blob atoms</title>
    <link>http://permalink.gmane.org/gmane.comp.ai.prolog.swi/16783</link>
    <description>&lt;pre&gt;Having got that archive4pl.c, I'm afraid I don't understand it :-(

Anyhow, I have got something that appears to work which only uses the release part of the blob definition (and I haven't tested the release).  I can't figure out a need or use for the other 3 parts.




For what it's worth, I'm making a stream interface that if you backtrack and re-read it remembers what was read before instead of pulling from the stream again.  The C++ side is just a vector-based history, and Prolog manages the rest.  


This can be used in conjunction with freeze/2 to make a DCG drive the reading of an input stream.  I could make this available if there's interest.



Alan Baljeu


From: Jan Wielemaker &amp;lt;J.Wielemaker&amp;lt; at &amp;gt;vu.nl&amp;gt;

To: Alan Baljeu &amp;lt;alanbaljeu&amp;lt; at &amp;gt;yahoo.com&amp;gt; 
Sent: Monday, May 14, 2012 2:17:43 PM
Subject: Re: [SWIPL] blob atoms
 
On 05/14/2012 05:55 PM, Alan Baljeu wrote:

Maybe the new archive package gives a reasonable example?

    Cheers --- Jan
-------------- next part --------------
HTML attachment scrubbed and removed
&lt;/pre&gt;</description>
    <dc:creator>Alan Baljeu</dc:creator>
    <dc:date>2012-05-14T19:19:59</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.ai.prolog.swi">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.ai.prolog.swi</link>
  </textinput>
</rdf:RDF>

