PLOGHELP IS Chris Mellish August 1982
Revised by Kathryn Seifert August 1986
Evaluating POP-11 and arithmetic expressions which return one result
?- is
Keywords: POP-11, Prolog, arithmetic, mixed language programming,
evaluation
CONTENTS - (Use g to access sections)
-- INTRODUCTION
-- USING 'IS' FOR ARITHMETIC
-- USING 'IS' TO EVALUATE NON-ARITHMETIC POP-11 EXPRESSIONS
-- PROLOG_EVAL
-- RELATED DOCUMENTATION
-- INTRODUCTION -------------------------------------------------------
'is' is a built-in Prolog predicate which is declared as an infix
operator of precedence 40 and fix "xfx" (see PLOGHELP * OP). Calls of
this predicate take the following form:
?- is
The expression E can be an arithmetic expression or other POP-11
expression. V becomes bound to the evaluation of E. V may be initially
instantiated or uninstantiated, but E must be fully instantiated.
-- USING 'IS' FOR ARITHMETIC ------------------------------------------
If E is an arithmetic expression, then it may be an integer or a real
number, or it may be composed of numbers using the special functors:
Expr1 * Expr2 - multiplication
Expr1 + Expr2 - addition
Expr1 - Expr2 - subtraction
Expr1 / Expr2 - real number division (See *MOD)
Expr1 mod Expr2 - integer remainder (See *INT)
Expr1 div Expr2 - integer division (See *MOD)
In fact, the name of any POP-11 procedure that takes numbers as
arguments and produces a single result can be used in making arithmetic
expressions for 'is' (see HELP * MATH and REF * NUMBERS). For
instance, if a procedure SUMSQ produced the sum of the squares of two
numbers, it would be possible to say:
?- X is 3 + sumsq(23,34).
If 'sumsq' was additionally declared as an operator (eg
?- op(20,xfy,sumsq). See PLOGHELP * OP) then it would be possible to
write:
?- X is 3 + 23 sumsq 34.
as an equivalent to the above goal.
-- USING 'IS' TO EVALUATE NON-ARITHMETIC POP-11 EXPRESSIONS -----------
'is' can be used to evaluate the Prolog representation of non-arithmetic
POP-11 expressions also. As with arithmetic expressions, care must be
taken that the POP-11 expressions return only one result. See
PLOGHELP * ARE for a library package which allows you to evaluate POP-11
expressions which return any number of results.
Here is an example of how 'is' can be used in a non-arithmetic context:
?- X is rev(hd([[black, and, blue], [cats, and, dogs]])).
X = [blue, and, black] ?
yes
See PLOGHELP * PLOGTOPOP and PLOGHELP * MIXED_LANGUAGES for other ways
of calling POP-11 from Prolog.
-- PROLOG_EVAL --------------------------------------------------------
The predicate 'is' is equivalent to the built-in predicate
'prolog_eval/2' (see PLOGHELP * PROLOG_EVAL).
-- RELATED DOCUMENTATION ----------------------------------------------
HELP * MATH
Overvie of mathematical operations and procedures in POP-11
PLOGHELP * ARE
Evaluating POP-11 expressions which return any number of results
PLOGHELP * ARITHMETIC
Overview of HELP files dealing with operations on numbers
PLOGHELP * MIXED_LANGUAGES
Overview of methods of interfacing Prolog and other languages
PLOGHELP * PLOGTOPOP
How to call POP-11 from Prolog
PLOGHELP * POPSTRING
How to put POP-11 strings in Prolog programs
PLOGHELP * POPTOPLOG
How to call Prolog from POP-11
PLOGHELP * PROLOG_EVAL
How to evaluate the Prolog representation of a POP-11 expression
PLOGHELP * PROLOG_LANGUAGE
Predicates and library package for switching from Prolog to POP-11
PLOGHELP * SIMPLEPOP
Library package to do simple things in POP-11 from Prolog
REF * NUMBERS
Detailed description of operations on numbers in POPLOG
--- C.all/plog/help/is -------------------------------------------------
--- Copyright University of Sussex 1988. All rights reserved. ----------