Количество объектов в Logtalk

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам