Document

Werbung
Funktional-logische Programmierung
© 2000 Prof. Dr. Rainer Manthey
Kapitel 5.3
5.1
5.1
Reduktionsstrategien
Reduktionsstrategienund
und
Spracherweiterungen
Spracherweiterungen
5.2
5.2
Haskell
Haskellund
undandere
anderewichtige
wichtige
funktionale
funktionaleSprachen
Sprachen
5.3
5.3
Funktional-logisches
Funktional-logischesProgrammieren
Programmieren
Deskriptive Programmierung SS 2000
1
Integration funktionaler und logischer Programmierung
•
seit Mitte der 1980er Jahre:
erste Versuche, Vorzüge beider deskriptiver "Sprachkulturen" in einer
Sprache zu vereinigen
•
Übersichtsartikel über frühe Ansätze:
Kapitel 5.3
M.
M.Bellia,
Bellia,G.
G.Levi:
Levi:
"The
"TheRelation
Relationbetween
betweenLogic
Logicand
andFunctional
Functional
Languages:
Languages:AASurvey"
Survey"
Journal
of
Logic
Journal of LogicProgramming
Programming3,3,1986,
1986,217-236
217-236
•
seit Anfang der 1990er Jahre:
diverse konkrete Sprachentwürfe und Prototypsysteme, u.a.
• LIFE (Ait-Kaci, Podelski/1993)
• Escher (Lloyd/1995)
• BABEL (Kuchen u.a./1996)
• Curry (Hanus/1997)
• RelFun (Boley/1999)
© 2000 Prof. Dr. Rainer Manthey
Deskriptive Programmierung SS 2000
2
FP/LP-Integration (2)
•
Kapitel 5.3
"modernerer" Übersichtsartikel:
Michael
MichaelHanus:
Hanus:
"The
"TheIntegration
IntegrationofofFunctions
Functionsinto
intoLogic
LogicProgramming:
Programming:
From
FromTheory
TheorytotoPractice",
Practice",
Journal
of
Logic
Programming
Journal of Logic Programming19/20,
19/20,1994,
1994,583-628
583-628
•
Einstiegsseite zur Funktional-Logischen Programmierung im Internet:
http://www-i2.informatik.rwth-aachen.de/~hanus/FLP/
http://www-i2.informatik.rwth-aachen.de/~hanus/FLP/
•
Webseiten einiger Prototypsprachen:
•
•
•
•
LIFE
Curry
RelFun
Babel
© 2000 Prof. Dr. Rainer Manthey
http://www.isg.sfu.ca/life/
http://www.informatik.uni-kiel.de/~curry/
http://www.dfki.uni-kl.de/~vega/relfun.html
http://www-i2.informatik.rwth-aachen/babel/
Deskriptive Programmierung SS 2000
3
Grundzüge der FLP
Kapitel 5.3
•
wichtigste Spracherweiterungen in FLP gegenüber reiner FP:
• Auswertung von Termen mit freien Variablen
• nicht-deterministische Funktionen
•
freie Variablen in einem Redex:
•
zwei Ansätze zum Umgang mit derartigen Ausdrücken:
• "rigid functions": Termauswertung wird solange verschoben ("delay"),
bis Variable durch Auswertung eines anderen Ausdrucks
gebunden wird (z.B. in Escher verwendet)
• "flexible functions":
•
ff 00 == 22
ff 11 == 33
ff XX ??
Alle möglichen Antwortbindungen für die freie
Variable werden generiert, in jedem dieser Fälle
ggf. weiter reduziert und eine disjunktive Antwort
ausgegeben (z.B. in Babel verwendet)
in Curry: Wahl zwischen beiden Auswertungsformen, z.B.:
ff eval
flex
eval flex
© 2000 Prof. Dr. Rainer Manthey
{x=0}
{x=1} 33
{x=0} 22 | | {x=1}
Deskriptive Programmierung SS 2000
4
Grundzüge der FLP (2)
Kapitel 5.3
•
zugehörige Operationalisierungstechniken:
• "rigid functions":
Residuation
(heute kaum noch untersucht)
• "flexible functions":
Narrowing
(viele Varianten vorgeschlagen,
Näheres im Survey von Hanus)
•
nichtdeterministische Funktionen: "Funktionen", die keine eindeutigen
Resultate mehr für gegebene Eingabekonstellation liefern
•
aus der Sicht der Logik keine Funktionen mehr !
•
"Hybridkonzept" zwischen Funktion (Syntax) und Relation (Semantik)
•
nur sinnvoll in Kombination mit disjunktiven Antworten (Narrowing)
choose
choose xx yy
choose
choose xx yy
== xx
== yy
choose
choose1122 ??
11 | | 22
© 2000 Prof. Dr. Rainer Manthey
Deskriptive Programmierung SS 2000
5
Beispiel für "nicht-deterministische" Reduktion
insert
insert
insert
insert
choose
choose xx yy
choose
choose xx yy
== xx
== yy
xx [[]]
xx (y:ys)
(y:ys)
Kapitel 5.3
==
==
[[xx]]
choose
choose (x:y:ys)
(x:y:ys) (y:insert
(y:insert xxys)
ys)
permute
permute [[]]
permute
permute (x:xs)
(x:xs)
==
==
[[]]
insert
insert xx (permute
(permute xs)
xs)
permute
permute [1,
[1,2,2,3]3] ??
[1,
[1,2,2,3]3] | | [2,
[2,1,1,3]3] | | [2,
[2,3,3,1]1] | | [1,
[1,3,3,2]2] | | [3,
[3,1,1,2]2] | | [3,
[3,2,2,1]1]
© 2000 Prof. Dr. Rainer Manthey
Deskriptive Programmierung SS 2000
6
Narrowing
•
Kapitel 5.3
Kombination von nichtdeterministischen Funktionen und freien Variablen zeigt
Ähnlichkeit von Narrowing und Paramodulation:
append
append [[]] ys
ys
append
append (x:xs)
(x:xs) ys
ys
==
==
ys
ys
xx: :append
append xs
xs ys
ys
freie Variable innerhalb eines = - Literals:
Verwendung ohne freie Variablen:
append
append xx [2]
[2] == [1,
[1,2]2] ??
append
append[1]
[1] [2]
[2] ??
x : append xs [2] = [1, 2]
xs/[ ]
[1,
[1,2]
2]
x : [2] = [1, 2]
Gewinnung von
Antwortsubstitutionen
© 2000 Prof. Dr. Rainer Manthey
Deskriptive Programmierung SS 2000
x/[1]
true
7
Herunterladen