[comp.lang.prolog] PROLOG Digest V6 #2

PROLOG-REQUEST@SUSHI.STANFORD.EDU (Chuck Restivo, The Moderator) (01/03/88)

PROLOG Digest             Monday, 4 Jan 1988        Volume 6 : Issue 2

Today's Topics:
                      Query - get0/read & Call,
                          LP Library - Book
----------------------------------------------------------------------

Date: 30 Dec 87 14:20:58 GMT
From: cos!duc@uunet.uu.net  (Duc Kim Nguyen)
Subject: Question on get0/read and call

I have a question concerning get0/read and call (I am using Quintus Prolog):

(1) A predicate f is defined with

        :- op(700,fx,f).
(2) A prompt requests input from the terminal:

       a) when I use read/1 to get input, eg. f tata, and call/1 on the
          input, the call takes place, ie., execution of predicate f occurs
          with input tata;
       b) when I decided to use the prompt library which uses a loop of get0/1
          to build up a list of input, and used atom_chars to convert list
          into atom, the call/1 on this term `f tata' resulted in prediciate
          'f data' undefined.

       Can someone explain to me what the difference between these two cases ?
       It seemed the blank made a difference in the two cases ?

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

Date: 31 Dec 87 12:56:51 GMT
From: linc.cis.upenn.edu!lang@super.upenn.edu  (Francois-Michel Lang)
Subject: Question on get0/read and call

I'm not sure I fully understand the question/problem, but I think I
can clear up one apparent misconception:  The operator declaration

:- op(700,fx,f).

does NOT define a predicate.  It only allows you to use the atom 'f'
as a prefix operator.  That sounds like it's part of the problem.

-- Francois-Michel Lang

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

Date: 31 Dec 87 01:53:00 GMT
From: quintus!ok@sun.com  (Richard A. O'Keefe)
Subject: Question on get0/read and call

I'm afraid I don't understand your question.  I'll answer what I
*think* is the question you are asking.

(1) An operator declaration doesn't define a predicate.
    The operator declaration has nothing to do with what I *think*
    your problem is.

(2) As near as I can figure out, you are trying two things.

    | ?- read(Goal), call(Goal).
    |: f data.

    This is the one that works.

    | ?- ensure_loaded(library(prompt)),
    |    prompted_line('Enter goal: ', Chars),
    |    atom_chars(Atom, Chars),
    |    call(Atom).
    Enter goal: f data

    This is the one that doesn't work.

    The blank has nothing to do with anything at all.


The answer is this:
    The built-in predicate read/1 reads a ***TERM***.
    In this particular example, the term you read was f(data).
    That is, it is a compound term with principal function symbol 'f'
    and arity 1, whose single argument is the atom 'data'.

    So in the example that works, you are doing call(f(data)).

    The library predicate prompted_line/2 reads a list of character
    codes.  In this particular example, the list was "f data".
    The built-in predicate atom_chars(Atom, Chars) expresses the
    relation between an ***ATOM*** and the list of characters
    comprising the name of the atom.  In this particular example,
    the atom you got back was 'f data'.

    So in the example that doesn't work, you are doing call('f data').
    That is, you are trying to call a predicate whose predicate
    symbol is 'f data' and which has no arguments.  If you had said
    "f(data)" instead of "f data", you would have ended up trying to
    call a predicate of no arguments whose name was the atom 'f(data)'.

    You should have got an error message which looked like this:

    [Warning: The procedure 'f data'/0 is undefined]
       (1) 1 Call: 'f data' ?

    DO pay attention to the single quotes in the error message,
    they ARE telling you something!

There are at least two ways of doing what you apparently want.

(a)     prompt_and_read(Prompt, Term) :-
                prompt(Prompt),
                read(Term).

    This version requires you to terminate the input term with a full
    stop and layout character, as always when using read/1.

(b)     :- ensure_loaded(library(charsio)).

        prompted_term(Prompt, Term) :-
                prompted_line(Prompt, Chars),
                chars_to_term(Chars, Term).

    This version doesn't require you to terminate the input with a
    full stop and layout character, but it won't let you use more
    than one line for the term either.

    On the grounds of portability, efficiency, and general hygiene,
    I'd go for (a).

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

Date: Thu, 31 Dec 87 9:52:44 PST
From: Kahn.pa@Xerox.COM
Subject: Concurrent Prolog Book Announcement


CONCURRENT PROLOG
COLLECTED PAPERS

(2 Vols.)

Edited by Ehud Shapiro

MIT Press Series in Logic Programming
ISBN 0-262-19266-7 (vol. 1) (pp. 560) 
ISBN 0-262-19257-5 (vol. 2) (pp. 680) 
ISBN 0-262-19255-1 (two volume set)   


                           Table of Contents

                               Volume 1

The Authors                                                            ix
The Papers                                                             xv
Foreword                                                              xix
Preface                                                               xxi
Introduction                                                          xxv

Part I: Concurrent Logic Programming Languages                          1

Introduction                                                            2
1.  A Relational Language for Parallel Programming                      9
    K. Clark and S. Gregory
2.  A Subset of Concurrent Prolog and Its Interpreter                  27
    E. Shapiro
3.  PARLOG: Parallel Programming in Logic                              84
    K. Clark and S. Gregory
4.  Guarded Horn Clauses                                              140
    K. Ueda
5.  Concurrent Prolog: A Progress Report                              157
    E. Shapiro
6.  Parallel Logic Programming Languages                              188
    A. Takeuchi and K. Furukawa

Part II: Programming Parallel Algorithms                              203

Introduction                                                          204
7.  Systolic Programming: A Paradigm of Parallel Processing           207
    E. Shapiro
8.  Notes on the Complexity of Systolic Programs                      243
    S. Taylor, L. Hellerstein, S. Safra and E. Shapiro
9.  Implementing Parallel Algorithms in Concurrent Prolog: The
    Maxflow Experience                                                258
    L. Hellerstein and E. Shapiro
10. A Concurrent Prolog Based Region Finding Algorithm                291
    L. Hellerstein
11. Distributed Programming in Concurrent Prolog                      318
    A. Shafrir and E. Shapiro
12. Image Processing with Concurrent Prolog                           339
    S. Edelman and E. Shapiro
13. A Test for the Adequacy of a Language for an Architecture         370
    E. Shapiro

Part III: Streams and Channels                                        389

Introduction                                                          390
14. Fair, Biased, and Self-Balancing Merge Operators: Their
    Specification and Implementation in Concurrent Prolog             392
    E. Shapiro and C. Mierowsky
15. Multiway Merge with Constant Delay in Concurrent Prolog           414
    E. Shapiro and S. Safra
16. Merging Many Streams Efficiently: The Importance of Atomic
    Commitment                                                        421
    V.A. Saraswat
17. Channels: A Generalization of Streams                             446
    E.D. Tribble, M.S. Miller, K. Kahn, D.G. Bobrow, C. Abbott and
    E. Shapiro
18. Bounded Buffer Communication in Concurrent Prolog                 464
    A. Takeuchi and K. Furukawa
References                                                            477
Index                                                                 507

                               Volume 2

The Authors                                                            ix
The Papers                                                           xiii
Preface to Volume 2                                                  xvii

Part IV: Systems Programming                                            1

Introduction                                                            2
19. Systems Programming in Concurrent Prolog                            6
    E. Shapiro
20. Computation Control and Protection in the Logix System             28
    M. Hirsch, W. Silverman and E. Shapiro
21. The Logix System User Manual, Version 1.21                         46
    W. Silverman, M. Hirsch, A. Houri and E. Shapiro
22. A Layered Method for Process and Code Mapping                      78
    S. Taylor, E. Av-Ron and E. Shapiro
23. An Architecture of a Distributed Window System and its FCP
    Implementation                                                    101
    D. Katzenellenbogen, S. Cohen and E. Shapiro
24. Logical Secrets                                                   140
    M.S. Miller, D.G. Bobrow, E.D. Tribble and J. Levy

Part V: Program Analysis and Transformation                           163

Introduction                                                          164
25. Meta Interpreters for Real                                        166
    S. Safra and E. Shapiro
26. Algorithmic Debugging of GHC Programs and Its Implementation
    in GHC                                                            180
    A. Takeuchi
27. Representation and Enumeration of Flat Concurrent Prolog
    Computations                                                      197
    Y. Lichtenstein, M. Codish and E. Shapiro
28. A Type System for Logic Programs                                  211
    E. Yardeni and E. Shapiro

Part VI: Embedded Languages                                           245

Introduction                                                          246
29. Object Oriented Programming in Concurrent Prolog                  251
    E. Shapiro and A. Takeuchi
30. Vulcan: Logical Concurrent Objects                                274
    K. Kahn, E.D. Tribble, M.S. Miller and D.G. Bobrow
31. PRESSing for Parallelism: A Prolog Program Made Concurrent        304
    L. Sterling and M. Codish
32. Compiling Or-Parallelism into And-Parallelism                     351
    M. Codish and E. Shapiro
33. Translation of Safe GHC and Safe Concurrent Prolog to FCP         383
    J. Levy and E. Shapiro
34.  Or-Parallel Prolog in Flat Concurrent Prolog                     415
     E. Shapiro
35. CFL --- A Concurrent Functional Language Embedded in a Concurrent
    Logic Programming Environment                                     442
    J. Levy and E. Shapiro
36. Hardware Description and Simulation Using Concurrent Prolog       470
    D. Weinbaum and E. Shapiro

Part VII: Implementations                                             491

Introduction                                                          492
37. A Sequential Implementation of Concurrent Prolog Based on the
    Shallow Binding Scheme                                            496
    T. Miyazaki, A. Takeuchi and T. Chikayama
38. A Sequential Abstract Machine for Flat Concurrent Prolog          513
    A. Houri and E. Shapiro
39. A Parallel Implementation of Flat Concurrent Prolog               575
    S. Taylor, S. Safra and E. Shapiro
References                                                            605
Index                                                                 635

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

End of PROLOG Digest
********************