[ The ECLiPSe Libraries | Reference Manual | Alphabetic Index ]

# library(cprolog)

C-Prolog compatibility package

## Predicates

> .(?, ?, ?)
>   No description available
> abolish(?, ?)
>   No description available
> assertz(?)
>   No description available
> consult(?)
>   No description available
> cp_access_undefined(?, ?)
>   No description available
> cp_inst_fault(?, ?)
>   No description available
> cp_range_error(?, ?)
>   No description available
> cp_type_error(?, ?)
>   No description available
> cp_undef_dynamic_handler(?, ?, ?)
>   No description available
> current_functor(?, ?)
>   No description available
> current_predicate(?, ?)
>   No description available
> db_reference(?)
>   No description available
> erased(?)
>   No description available
> fileerrors
>   No description available
> get(?)
>   No description available
> get0(?)
>   No description available
> heapused(?)
>   No description available
> instance(?, ?)
>   No description available
> leash(?)
>   No description available
> log(?, ?)
>   No description available
> log10(?, ?)
>   No description available
> nofileerrors
>   No description available
> primitive(?)
>   No description available
> prompt(?, ?)
>   No description available
> put(?)
>   No description available
> reconsult(?)
>   No description available
> sh
>   No description available

## Reexports

> reexport cio
> reexport eclipse_language
>   except get / 1, put / 1, instance / 2, abolish / 1, macro(if / 2, _, _)

## Other Exports

> export op(0, xfx, of)
> export op(0, xfx, with)
> export op(0, xfy, do)
> export op(0, xfx, @)
> export op(0, fx, -?->)
> export macro(with / 2, cprolog : = / 2, [])
> export macro(of / 2, cprolog : = / 2, [])
> export syntax_option(nl_in_quotes)
> export syntax_option(no_blanks)
> export syntax_option(no_array_subscripts)
> export syntax_option(limit_arg_precedence)
> export syntax_option(doubled_quote_is_quote)
> export syntax_option(bar_is_no_atom)
> export syntax_option(no_attributes)
> export syntax_option(no_curly_arguments)
> export syntax_option(blanks_after_sign)
> export chtab(36, lower_case)
> export chtab(92, symbol)
> export chtab(128, string_quote)
> export chtab(34, list_quote)
> export op(500, fx, \)
> export op(900, fy, spy)
> export op(900, fy, nospy)

## Description

One of the requirements during the development of ECLiPSe has been the aim of minimising the work required to port traditional Prolog programs to ECLiPSe. A de-facto standard for many years was the C-Prolog dialect, often referred to as Edinburgh Prolog. Therefore, many of the non standard predicates in C-Prolog have also been included in ECLiPSe. It is of course impossible to achieve total compatibility between the two systems. To assist in making the changes necessary to run a C-Prolog program on the current version of ECLiPSe, we describve here the predicates available in the C-Prolog compatibility library and summarise the principal differences between ECLiPSe Prolog and C-Prolog.

Most of the C-Prolog predicates are also ECLiPSe built-in predicates and so they can be always accessed.

Please note that this text does not detail the functionality of C-Prolog, refer to the C-Prolog documentation for this information.

The effect of the compatibility library is local to the module where it is loaded. For maximum compatibility, a C-Prolog program should be wrapped in a separate module starting with a directive like

        :- module(mymodule, [], cprolog).

In this case, Eclipse-specific language constructs will not be available.

If the compatibility package is loaded into a standard module, e.g. like

        :- module(mymixedmdule).
        :- use_module(library(cprolog)).

then C-Prolog and Eclipse language features can be used together. However, ambiguities must be resolved explicitly and confusion may arise from the different meaning of quotes in Eclipse vs C-Prolog.

Note that the C-Prolog compatibility package includes the cio (for see/1, seeing/1, seen/0, skip/1, tab/1, tell/1, telling/1, told/0) and the scattered library.

The following C-Prolog predicates are not available in ECLiPSe, or the corresponding predicates have a different semantics:

assert/2, asserta/2, assertz/2, clause/3
  ECLiPSe does not support database references for clauses.
expand_term/2
  This is not supported. ECLiPSe provides the macro facility for transforming input terms (see chapter 13).
'LC'/0, 'NOLC'/0
  These are not supported in ECLiPSe.

The following differences remain even with the compatibility package:

Database References
  ECLiPSe provides database references only for terms in the indexed database, not for program clauses.
Numbers
  C-Prolog has a tendency to "prefer" integers over real numbers. For instance, under C-Prolog when the call X is 4.0/2.0 is made, X is instantiated to an integer. This behaviour does not occur in ECLiPSe. The order of integers and reals in the standard order is different.
Operators
  In C-Prolog there is a bug regarding the operator not -- it binds closer than its precedence declaration.
Strings
  Strings are simulated in C-Prolog by lists. Under C-Prolog mode, ECLiPSe provides this functionality -- double-quoted strings are parsed as lists of integers. This can cause confusion when pure ECLiPSe predicates are used in C-Prolog mode, e.g. substring/3 will not accept double-quoted items, since they are lists, not ECLiPSe strings. The built-in string_list/2 converts between both representations.
consult/1, reconsult/1
  These are implemented by simply calling the ECLiPSe predicate compile/1. By default all compiled procedures are static. Procedures on which assert/1 etc. will be applied, have to be declared as dynamic using dynamic/1. The notation [-File] for reconsult/1 is not supported.
get/1
  This is similar to the ECLiPSe predicate get/1, but control characters and blank spaces are skipped.
put/1
  This is similar to the ECLiPSe predicate put/1, but it first applies arithmetic evaluation to its argument.
heapused/1
  Needed for evaluating heapused in arithmetic expressions. It returns the sum of code heap and general heap usage.
instance/2
  Note that this compatibility predicate redefines the ECLiPSe builtin of the same name but different meaning (which is no longer available in C-Prolog mode). It is implemented using the ECLiPSe predicate referenced_record/2.
log/2, log10/2
  These are not predicates in C-Prolog (arithmetic functors), but in ECLiPSe they are needed for evaluating log/1 and log10/1 in arithmetic expressions.
ttyput/1
  corresponds to the DEC-10 Prolog predicate

The list below describes the syntax differences between ECLiPSe and C-Prolog. The following C-Prolog properties are simulated by the compatibility package:

- single (resp. double) quote must be doubled between single (resp. double) quotes.
- $ is a normal character.
- the symbol | is not an atom.

The following properties of original C-Prolog are not simulated by the compatibility package:

- a clause can not be ended by end of file.
- based integers are not accepted.
- comments are not a delimiter (just ignored).
- {} is not an atom.
- [] can not be a functor.

## About

- Author: Various, ECRC Munich
- Copyright © Cisco Systems, Inc
- Date: $Date: 2006/12/11 18:57:58 $

## See Also

library(cio), library(quintus)

Generated from cprolog.eci on Sat Nov 8 06:55:51 2008