Количество объектов в Logtalk - PullRequest
0 голосов
/ 07 января 2019

У меня есть протокол:

:- protocol(person).
:- public([name/1,
        age/1]).
:- end_protocol.

Например, я создал неизвестное количество объектов, используя create_object/4, как я могу получить их количество? Это не проблема получить их имена по current_object/1, но мне нужно целое число!

1 Ответ

0 голосов
/ 07 января 2019

Предполагая, что только объекты (то есть без категорий) реализуют протокол person, вы можете вычислить их количество, например,

count(N) :-
    findall(1, implements_protocol(_,person), L),
    list::length(L, N).

Замените вызов на implements_protocol /2 на conforms_to_protocol/2, если у вас есть иерархия объектов. Вы также можете обобщить предикат count/1, передав протокол в качестве аргумента.

...