Abstract:
So far we have dealt only with a small fragment of Prolog which is hardly adequate for programming. In this chapter we discuss various other features of Prolog and explain their meaning and use. Some of these features have also been studied from the program correctness point of view. This study has always taken place by considering appropriate extensions of logic programming. The exposition of these developments and of the application of the resulting theories to verification of Prolog programs would require another hundred or so pages and thus would make this book inappropriate for a one semester course. Moreover, the correctness aspects of these Prolog programs have not been studied in a systematic fashion. Therefore we limit ourselves to providing necessary pointers to the literature. We begin our presentation by discussing in the next section the cut operator. In Section 11.2 we explain its use by presenting programs that deal with sets. Next, in Section 11.3 we discuss Prolog facilities that allow us to collect all solutions to a query. In Section 11.4, we introduce an interesting feature of Prolog--- metavariables and explain their use. We also explain there how these two features---cut and meta-variables--- allow us to define some other control facilities in Prolog. In Section 11.5 we introduce negation in Prolog and illustrate its use by means of simple programs. Negation is an important facility because it allows us to write simpler and shorter programs and because it provides a readily available computational interpretation of non-monotonic reasoning, an important branch of common-sense reasoning, an area of artificial intelligence. We illustrate these uses of negation in Section 11.6, where we present a number of programs that deal with directed graphs and in Section 11.7, where we explain the modelling of non-monotonic reasoning. In the subsequent two sections we study various meta-level built-ins. These are built-ins that allow us to access, compare or modify the syntactic entities out of which the programs are built. In particular, in Section 11.8 we deal with the builtins that allow us to inspect, compare and decompose terms and in Section 11.9 we
Citations
|
1224
|
Some philosophical problems from the standpoint of arti cial intelligence
– McCarthy, Hayes
- 1969
|
|
1126
|
The Stable Model Semantics for Logic Programming
– Gelfond, Lifschitz
- 1988
|
|
787
|
Negation as Failure
– Clark
- 1978
|
|
557
|
Towards a theory of Declarative Knowledge
– Apt, Blair, et al.
- 1988
|
|
556
|
The Art of Prolog
– Sterling, Shapiro
- 1986
|
|
332
|
Logic for problem solving
– Kowalski
- 1974
|
|
230
|
Nonmonotonic logic and temporal projection
– Hanks, McDermott
- 1987
|
|
218
|
Logic programming and negation: A survey
– Apt, Bol
- 1994
|
|
200
|
Unfounded sets and well-founded semantics for general logic programs
– Gelder, Ross, et al.
- 1991
|
|
164
|
Acyclic programs
– Apt, Bezem
- 1991
|
|
119
|
Reasoning about termination of pure PROLOG programs
– Apt, Pedreschi
- 1993
|
|
118
|
Negation as failure using tight derivations for general logic programs
– Gelder
- 1986
|
|
100
|
Amalgamating language and metalanguage in logic programming
– Bowen, Kowalski
- 1982
|
|
94
|
Signed data dependencies in logic programs
– Kunen
- 1989
|
|
60
|
Analysis of meta-programs
– Hill, Lloyd
- 1989
|
|
56
|
A Mathematical Definition of Full Prolog
– Borger, Rosenzweig
- 1994
|
|
53
|
Denotational and Operational Semantics for Prolog
– Debray, Mishra
- 1988
|
|
52
|
Stepwise Development of Operational and Denotational Semantics for PROLOG
– Jones, Mycroft
- 1984
|
|
32
|
K.: A New Definition of SLDNF-Resolution
– Apt, Doets
- 1994
|
|
27
|
Prolog: The Standard
– Deransart, Ed-Dbali, et al.
- 1996
|
|
27
|
Schreye. Why untyped non-ground meta-programming is not (much of) a problem
– Martens, De
- 1995
|
|
24
|
Proving termination properties of Prolog programs: a semantic approach
– Baudinet
- 1992
|
|
22
|
A Kripke-Kleene semantics for general logic programs
– Fitting
- 1985
|
|
21
|
Negation-as-failure as an approach to the Hanks and McDermott problem
– Evans
- 1989
|
|
18
|
Operational and Denotational Semantics of Prolog
– Arbab, Berry
- 1987
|
|
18
|
Two semantics for definite meta-programs, using the non-ground representation
– Martens, Schreye
- 1995
|
|
17
|
A new SLDNF-tree
– Martelli, Tricomi
- 1992
|
|
14
|
Program verification and prolog
– Apt
- 1995
|
|
12
|
A methodology for proving termination of logic programs
– Wang, Shyamasundar
- 1994
|
|
9
|
User's guide to DECsystem-10 Prolog
– Pereira, Pereira, et al.
- 1978
|
|
9
|
Verification of Metainterpreters
– Pedreschi, Ruggieri
- 1997
|
|
8
|
A formalization of metaprogramming for real
– Levi, Ramundo
- 1993
|
|
7
|
An operational formal definition of Prolog
– Deransart, Ferrand
- 1987
|
|
6
|
A declarative approach for firstorder built-in’s
– Apt, Marchiori, et al.
- 1994
|
|
5
|
Correctness of the vanilla meta-interpreter and ambivalent syntax
– Kalsbeek
- 1995
|
|
3
|
Meta-variables in logic programming, or in praise of ambivalent syntax
– APT, BEN-ELIYAHU
- 1996
|
|
3
|
A perfect logic for reasoning about action
– Elkan
- 1989
|
|
3
|
A prescribed cut for Prolog that ensures soundness
– Lilly, Bryant
- 1992
|
|
2
|
Comparing negation in logic programming and in Prolog
– Apt, Teusink
- 1995
|