[ Type Testing | Reference Manual | Alphabetic Index ]
is_handle(?Term, -Kind)
Succeeds if Term is an object handle of kind Kind
- Term
- Prolog term.
- Kind
- Atom or variable
Description
Used to test whether Term is an object handle, and of what kind.
Handles are references to anonymous ECLiPSe objects or to external
data created via the foreign language interfaces.
Handles are anonymous and are distinct from from the regular
Prolog-style data types (number, atom, compound). They support
only a limited number of operations, and are mostly used in
relation to ECLiPSe's non-logical features.
The following kinds of object are defined by ECLiPSe itself:
- bag
-
A bag object, as created by bag_create/1.
- engine
-
An engine object, as created by engine_create/2.
- record
-
A record object, as created by record_create/1.
- shelf
-
A shelf object, as created by shelf_create/2,3.
- store
-
A store object, as created by store_create/1.
- stream
-
A stream object, as created by open/3,4, socket/3, etc.
- []
-
A stale handle, no longer referring to any object,
e.g. after handle_close/1, close/1, bag_dissolve/1.
Handles can be also be created by external predicates using the
ECLiPSe C or C++ API. The kind of such a handle is determined by
the atomic name returned by the user-defined kind() method.
Modes and Determinism
- is_handle(?, -) is semidet
Fail Conditions
Fails if Term is not an external data handle
Examples
?- bag_create(B), is_handle(B, Kind).
B = $&(bag,"371bnb")
Kind = bag
Yes (0.00s cpu)
?- engine_self(E), is_handle(E, Kind).
E = $&(engine,"cg51thx4p")
Kind = engine
No (0.00s cpu)
?- get_stream(output, S), is_handle(S, Kind).
S = $&(stream,1)
Kind = stream
No (0.00s cpu)
?- is_handle(42, Kind).
No (0.00s cpu)
?- is_handle(output, Kind).
No (0.00s cpu)
See Also
is_handle / 1, handle_close / 1, type_of / 2, xget / 3, xset / 3