对象提供的分类方法
Category method provided by the object
假设我有:
:- category(multi).
:- public([set/2, set/3]).
%% set(r,c,v).
set([],_). %% multi-ix/value set
set([[Row, Col]|RCs], Value) :- \+ is_list(Value), set(Row, Col, Value), set(RCs, Value).
set([[Row, Col]|RCs], [V|Vs]) :- set(Row, Col, V), set(RCs, Vs).
:- end_category.
* Declared static predicate called but not defined: set/3
set/3 由对象提供...如何使其工作..?
只需在self中调用set/3
谓词(即在接收set/2
消息的对象的上下文中):
:- category(multi).
:- public([set/2, set/3]).
%% set(r,c,v).
set([],_). %% multi-ix/value set
set([[Row, Col]|RCs], Value) :- \+ is_list(Value), ::set(Row, Col, Value), set(RCs, Value).
set([[Row, Col]|RCs], [V|Vs]) :- ::set(Row, Col, V), set(RCs, Vs).
:- end_category.
例如,假设以下对象导入类别:
:- object(proto,
imports(multi)).
set(1, 1, 42).
:- end_object.
然后您可以使用以下查询:
?- proto::set([[1,1]], V).
V = 42 ;
V = [42|_].
P.S。 is_list/1
谓词不是标准的 built-in 谓词。但相同的功能可从 list
库对象获得。比如加载basic_types(loader)
后,可以在分类中使用:
:- uses(list, [valid/1 as is_list/1]).
或者,也可以使用同一库提供的 type
对象:
:- uses(type, [valid(list,Term) as is_list(Term)]).
假设我有:
:- category(multi).
:- public([set/2, set/3]).
%% set(r,c,v).
set([],_). %% multi-ix/value set
set([[Row, Col]|RCs], Value) :- \+ is_list(Value), set(Row, Col, Value), set(RCs, Value).
set([[Row, Col]|RCs], [V|Vs]) :- set(Row, Col, V), set(RCs, Vs).
:- end_category.
* Declared static predicate called but not defined: set/3
set/3 由对象提供...如何使其工作..?
只需在self中调用set/3
谓词(即在接收set/2
消息的对象的上下文中):
:- category(multi).
:- public([set/2, set/3]).
%% set(r,c,v).
set([],_). %% multi-ix/value set
set([[Row, Col]|RCs], Value) :- \+ is_list(Value), ::set(Row, Col, Value), set(RCs, Value).
set([[Row, Col]|RCs], [V|Vs]) :- ::set(Row, Col, V), set(RCs, Vs).
:- end_category.
例如,假设以下对象导入类别:
:- object(proto,
imports(multi)).
set(1, 1, 42).
:- end_object.
然后您可以使用以下查询:
?- proto::set([[1,1]], V).
V = 42 ;
V = [42|_].
P.S。 is_list/1
谓词不是标准的 built-in 谓词。但相同的功能可从 list
库对象获得。比如加载basic_types(loader)
后,可以在分类中使用:
:- uses(list, [valid/1 as is_list/1]).
或者,也可以使用同一库提供的 type
对象:
:- uses(type, [valid(list,Term) as is_list(Term)]).