Fril
Encyclopedia
Fril is a programming language
Programming language
A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely....

 for first-order predicate calculus. It includes the semantics
Semantics
Semantics is the study of meaning. It focuses on the relation between signifiers, such as words, phrases, signs and symbols, and what they stand for, their denotata....

 of Prolog
Prolog
Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is declarative: the program logic is expressed in terms of...

 as a subset, but takes its syntax from the micro-Prolog of Logic Programming Associates
Logic Programming Associates
Logic Programming Associates is a company specializing in logic and artificial intelligence software. It was founded in 1980 and is most widely known for its Prolog compilers such as WIN-PROLOG....

 and adds support for fuzzy set
Fuzzy set
Fuzzy sets are sets whose elements have degrees of membership. Fuzzy sets were introduced simultaneously by Lotfi A. Zadeh and Dieter Klaua in 1965 as an extension of the classical notion of set. In classical set theory, the membership of elements in a set is assessed in binary terms according to...

s, support logic, and metaprogramming
Metaprogramming
Metaprogramming is the writing of computer programs that write or manipulate other programs as their data, or that do part of the work at compile time that would otherwise be done at runtime...

.

Fril was originally developed by Trevor Martin and Jim Baldwin at the University of Bristol
University of Bristol
The University of Bristol is a public research university located in Bristol, United Kingdom. One of the so-called "red brick" universities, it received its Royal Charter in 1909, although its predecessor institution, University College, Bristol, had been in existence since 1876.The University is...

 around 1980. In 1986, it was picked up and further developed by Equipu A.I. Research, which later became Fril Systems Ltd. The name Fril was originally an acronym for Fuzzy Relational Inference Language.

Prolog and Fril comparison

Aside from the uncertainty-management features of Fril, there are some minor differences in Fril's implementation of standard Prolog features.

Types

The basic types in Fril are similar to those in Prolog, with one important exception: Prolog's compound data type is the term, with lists defined as nested terms using the . functor; in Fril, the compound type is the list itself, which forms the basis for most constructs. Variables are distinguished by identifier
Identifier
An identifier is a name that identifies either a unique object or a unique class of objects, where the "object" or class may be an idea, physical [countable] object , or physical [noncountable] substance...

s containing only uppercase letters and underscore
Underscore
The underscore [ _ ] is a character that originally appeared on the typewriter and was primarily used to underline words...

s (whereas Prolog only requires the first character to be uppercase). As in Prolog, the name _ is reserved to mean "any value", with multiple occurrences of _ replaced by distinct variables.

Syntax

Prolog has a syntax with a typical amount of punctuation, whereas Fril has an extremely simple syntax similar to that of Lisp
Lisp programming language
Lisp is a family of computer programming languages with a long history and a distinctive, fully parenthesized syntax. Originally specified in 1958, Lisp is the second-oldest high-level programming language in widespread use today; only Fortran is older...

. A (propositional) clause is a list consisting of a predicate followed by its arguments (if any). Among the types of top-level constructs are rules and direct-mode commands.

Rule

A rule is a list consisting of a conclusion followed by the hypotheses (goals). The general forms look like this:
(fact)
(conclusion goal_1 ... goal_n)
These are equivalent to the respective Prolog constructions:
fact.
conclusion :- goal_1, ..., goal_n.

For example, consider the member predicate in Prolog:
member(E, [E|_]).
member(E, [_|T]) :- member(E, T).
In Fril, this becomes:
((member E (E|_)))
((member E (_|T)) (member E T))

Relation

Some data can be represented in the form of relations. A relation is equivalent to a set of facts with the same predicate name and of constant arity
Arity
In logic, mathematics, and computer science, the arity of a function or operation is the number of arguments or operands that the function takes. The arity of a relation is the dimension of the domain in the corresponding Cartesian product...

, except that none of the facts can be removed (other than by killing the relation); such a representation consumes less memory internally. A relation is written literally as a list consisting of the predicate name followed by one or more tuples of the relation (all of the arguments of the equivalent fact without the predicate name). A predicate can also be declared a relation by calling the def_rel predicate; this only works if the proposed name does not already exist in the knowledge base
Knowledge base
A knowledge base is a special kind of database for knowledge management. A Knowledge Base provides a means for information to be collected, organised, shared, searched and utilised.-Types:...

. Once a predicate is a relation, anything that would ordinarily add a rule (and does not violate the restrictions of relations) automatically adds a tuple to the relation instead.

Here is an example. The following set of facts:
((less-than 2 3))
((less-than 8 23))
((less-than 42 69))
can be rewritten as the relation:
(less-than
(2 3)
(8 23)
(42 69))

Direct mode

A predicate may be called with exactly one argument using the syntax:
predicate argument
Queries are submitted using this syntax, with predicate being ? (or one of the other query-related predicates).

Fuzzy sets

Fril supports both continuous and discrete fuzzy sets, each with their own special syntaxes. A discrete set (dtype) lists discrete values and their degrees of membership, with this syntax:
{value:dom value:dom ... value:dom}
value is an atom or number, and dom is a value in the interval [0, 1].

A continuous set (itype) lists real number
Real number
In mathematics, a real number is a value that represents a quantity along a continuum, such as -5 , 4/3 , 8.6 , √2 and π...

s and their degrees of membership; the degree-of-membership function is the linear interpolation over these mappings. The syntax is thus:
[value:dom value:dom ... value:dom]
where the values must be given in non-decreasing order.

Each dtype and itype may be constrained to a universe (a set of allowable values). Fril has predicates for fuzzy set operations (but does not directly support control through fuzzy logic
Fuzzy logic
Fuzzy logic is a form of many-valued logic; it deals with reasoning that is approximate rather than fixed and exact. In contrast with traditional logic theory, where binary sets have two-valued logic: true or false, fuzzy logic variables may have a truth value that ranges in degree between 0 and 1...

). It is even possible to combine dtypes and itypes through some operations, as long as the dtypes contain only real numbers.

Support pairs

Any rule may have a probability interval (called a support pair) associated with it by appending :(min max) to it, where min and max are the minimum and maximum probabilities. Fril includes predicates that calculate the support for a given query.

Disjunction

While Prolog uses punctuation — namely ; — for disjunction within clauses, Fril instead has a built-in predicate orr.

Merits

There are advantages and disadvantages to this simpler syntax. On the positive side, it renders predicates such as Prolog's =.. (which maps between lists and clauses) unnecessary, as a clause is a list. On the other hand, it is more difficult to read.

Behavior

As a logic programming environment, Fril is very similar to Prolog. Here are some of the differences:
  • Both Prolog and Fril have shell
    Shell (computing)
    A shell is a piece of software that provides an interface for users of an operating system which provides access to the services of a kernel. However, the term is also applied very loosely to applications and may include any software that is "built around" a particular component, such as web...

     applications, which serve as the standard way of interacting with them. Prolog reads commands in two modes: in source file-reading mode, it accepts directives and clauses; in user interaction mode, it accepts only queries (although it is possible to tell Prolog to read directives and clauses from standard input by using consult(user).). Fril makes no distinction: all types of commands can be given both from source files and on the command line.
  • The Prolog shell automatically prints the values of all instantiated variables that appear in a query, along with a yes or no answer. The Fril shell only gives the answer; it is the user's responsibility to print variables if desired.

External links

The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK