can и ООП

can - возвращает список всех классов, которые принимают сообщение. Функция режима отладки!

Классы и сообщения … То есть PicoLisp типа CLOS, Common Lisp? Он инкапсулирует код и данные в объекты, как с состоянием, так и с поведением. Объекты взаимодействуют посредством сообщений. Объекты организованы в классы и наследуют поведение от классов и суперклассов. Объекты разных классов могут вести себя по-разному в ответ на одно и то же сообщение. Для этого классы могут определять разные методы для каждого сообщения. То есть, мы имеем классический набор, характеризующий ООП - инкапсуляция, наследование и полиморфизм.

PicoLisp реализует как объекты, так и классы с помощью символов. Локальные данные объекта хранятся в списке свойств символа, в то время как код (методы) и ссылки на суперклассы хранятся в VAL символа (инкапсуляция). Нет формальной разницы между объектами и классами (за исключением того, что объекты обычно являются анонимными символами, содержащими в основном локальные данные, в то время как классы называются внутренними символами с акцентом на определения методов). В любое время классу могут быть назначены его собственные локальные данные (переменные класса), и любой объект может получить индивидуальные определения методов в дополнение к (или переопределяя) определения, унаследованные от его (супер)классов.

PicoLisp поддерживает множественное наследование. VAL каждого объекта — это (возможно, пустой) список ассоциаций символов сообщений и тел методов, объединенный со списком классов. Когда сообщение отправляется объекту, оно ищется в собственном списке методов объекта, а затем (с помощью поиска в глубину слева направо) в дереве его классов и суперклассов. Выполняется первый найденный метод, и поиск останавливается, но может быть явно продолжен с помощью обращения к специальным функциям. Поскольку поиск метода полностью динамический (позднее связывание), тип объекта (т. е. его классы и определения методов) можно изменить даже во время выполнения!

То есть, в PicoLisp своя оригинальная реализация ООП (концепции ОО) и более того, помимо иерархического наследования (вертикального) реализовано “горизонтальное“ с “префиксными классами“ (с более тонкой настройкой поведения …) … То есть тема объектной реализации интересная и требует отдельного рассмотрения.