Did you know ... Search Documentation:
record.pl -- Access compound arguments by name
PublicShow source

This module creates a set of predicates to create a default instance, access and modify records represented as a compound term.

The full documentation is with record/1, which must be used as a directive. Here is a simple example declaration and some calls.

:- record point(x:integer=0, y:integer=0).

        point_x(Point, X),
        set_x_of_point(10, Point, Point1),

        make_point([y(20)], YPoint),
- Jan Wielemaker
- Richard O'Keefe
Source record(+RecordDef)
Define access predicates for a compound-term. RecordDef is of the form <constructor>(<argument>, ...), where each argument is of the form:
  • <name>[:<type>][=<default>]

Used a directive, :- record Constructor(Arg, ...) is expanded info the following predicates:

  • <constructor>_<name>(Record, Value)
  • <constructor>_data(?Name, ?Record, ?Value)
  • default_<constructor>(-Record)
  • is_<constructor>(@Term)
  • make_<constructor>(+Fields, -Record)
  • make_<constructor>(+Fields, -Record, -RestFields)
  • set_<name>_of_<constructor>(+Value, +OldRecord, -New)
  • set_<name>_of_<constructor>(+Value, !Record)
  • nb_set_<name>_of_<constructor>(+Value, !Record)
  • set_<constructor>_fields(+Fields, +Record0, -Record).
  • set_<constructor>_fields(+Fields, +Record0, -Record, -RestFields).
  • set_<constructor>_field(+Field, +Record0, -Record).
  • user:current_record(:<constructor>)
Source compile_records(+RecordsDefs, -Clauses) is det[private]
Compile a record specification into a list of clauses.
Source compile_record(+Record)// is det[private]
Create clauses for Record.
Source current_record(?Name, :Term)
True if Name is the name of a record defined in the module associated with Term and Term is the user-provided record declaration.
Source current_record_predicate(?Record, ?PI) is nondet
True if PI is the predicate indicator for an access predicate to Record. This predicate is intended to support cross-referencer tools.
Source make_predicate(+Constructor)// is det[private]
Creates the make_<constructor>(+Fields, -Record) predicate. This looks like this:
make_<constructor>(Fields, Record) :-
        make_<constructor>(Fields, Record, [])

make_<constructor>(Fields, Record, RestFields) :-
        set_<constructor>_fields(Fields, Record0, Record, RestFields).

set_<constructor>_fields(Fields, Record0, Record) :-
        set_<constructor>_fields(Fields, Record0, Record, []).

set_<constructor>_fields([], Record, Record, []).
set_<constructor>_fields([H|T], Record0, Record, RestFields) :-
        (   set_<constructor>_field(H, Record0, Record1)
        ->  set_<constructor>_fields(T, Record1, Record, RestFields)
        ;   RestFields = [H|RF],
            set_<constructor>_fields(T, Record0, Record, RF)

set_<constructor>_field(<name1>(Value), Record0, Record).
Source is_predicate(+Constructor, +Types)// is det[private]
Create a clause that tests for a given record type.
Source type_goal(+Type, +Var, -BodyTerm) is det[private]
Inline type checking calls.
Source access_predicates(+Names, +Idx0, +Arity, +Constructor)// is det[private]
Create the <constructor>_<name>(Record, Value) predicates.
Source data_predicate(+Names, +Idx0, +Arity, +Constructor, +DataName)// is det[private]
Create the <constructor>_data(Name, Record, Value) predicate.
Source set_predicates(+Names, +Idx0, +Arity, +Types, +Constructor)// is det[private]
Create the clauses
  • set_<name>_of_<constructor>(Value, Old, New)
  • set_<name>_of_<constructor>(Value, Record)
Source set_field_predicates(+Names, +Idx0, +Arity, +Types, +Constructor)// is det[private]
Create the clauses
  • set_<constructor>_field(<name>(Value), Old, New)
Source replace_nth(+Index, +List, +Element, -NewList) is det[private]
Replace the Nth (1-based) element of a list.
Source defaults(+ArgsSpecs, -Defaults, -Args)[private]
Strip the default specification from the argument specification.
Source types(+ArgsSpecs, -Defaults, -Args)[private]
Strip the default specification from the argument specification.