The Reasoned 'Scripter

Adventures in JavaScript Logic Programming

What is Logic?

Propositional Logic

Margaret Hamilton is a Programmer

Margaret Hamilton Programs Assembly

AND

Programmers

Languages

Adele Goldberg

Margaret Hamilton

Assembly

Smalltalk

Adele Goldberg Assembly
Adele Goldberg Smalltalk
Maragret Hamilton Assembly
Margaret Hamilton Smalltalk

Programs(Adele Goldberg, Smalltalk)

Programs(Margaret Hamilton, Assembly)

Relational Logic

Variables and Quantification

\exists X .(Programs(X,Assembly))
X.(Programs(X,Assembly))\exists X .(Programs(X,Assembly))

There exists an X such that Programs(X, Assembly)

 

At least one programmer programs assembly.

Prolog

different(red,green).
different(green,red).
different(red,blue).
different(blue,red).
different(red,yellow).
different(yellow,red).
different(yellow,green).
different(green,yellow).
different(yellow,blue).
different(blue,yellow).
different(green,blue).
different(blue,green).

colour(Ten,Mis,Ala,Geo,Flo) :-
    different(Ten,Mis),
    different(Ten,Ala),
    different(Ten,Geo),
    different(Mis,Ala),
    different(Ala,Geo),
    different(Ala,Flo),
    different(Geo,Flo).

Logiql

// entity declaraton 
Album(a), Album_name(a:name) -> string(name).

// album attribute declaration
Album_year[a] = year -> Album(a), int(year).

// predicate declaration
BerlinPeriod(a) -> Album(a).

// rule
BerlinPeriod(a) <-
    1980 > Album_year[a] > 1976.
+Album(a),
+Album_name(a,"Station To Station"),
+Album_year[a] = 1976.

+Album(a),
+Album_name(a,"Low"),
+Album_year[a] = 1977.

+Album(a),
+Album_name(a,"Heroes"),
+Album_year[a] = 1977.

+Album(a),
+Album_name(a,"Lodger"),
+Album_year[a] = 1979.

+Album(a),
+Album_name(a,"Scary Monsters"),
+Album_year[a] = 1980.
ryan@blahbox:~/dev/logiql$ lb query bowie '_(x) <- BerlinPeriod(x).'
/--------------- _ ---------------\
[10000000004] "Lodger"
[10000000005] "Heroes"
[10000000007] "Low"
\--------------- _ ---------------/

Do It Yourself

Keep It Simple, Stupid

Any Questions?

The Reasoned 'Scripter

By Ryan Gough

The Reasoned 'Scripter

Adventures in Logic Programming

  • 601