Как рассчитать количество нативных функций в Rebol3?
(help native! печатает собственные функции в lib, но не возвращает блок слов.)
ОБНОВЛЕНИЕ: я исправил вопрос после ошибки, выделенной @HostileFork.
Как рассчитать количество нативных функций в Rebol3?
(help native! печатает собственные функции в lib, но не возвращает блок слов.)
ОБНОВЛЕНИЕ: я исправил вопрос после ошибки, выделенной @HostileFork.
Каталог аборигенов (или хотя бы слов их имен) строится при загрузке:
>> length? system/catalog/natives
== 160
В lib больше определений, чем просто нативные подпрограммы. Определения наборов и прочего. Но почти каждый натив доступен через него при запуске:
>> natives: []
>> foreach [word value] lib [if native? :value [append natives word]]
>> length? natives
== 168
Некоторые из этих различий объясняются синонимами (Q для ВЫХОДА, --- для КОММЕНТАРИЯ и т. д.):
>> difference natives system/catalog/natives
== [native action q ! min max --- bind? pwd context]
NATIVE и ACTION особенные и по каким-то причинам не попадают в каталог.
(Обратите внимание, что в текущей версии сборки Rebol3 Ren-C есть только один тип данных FUNCTION!. Таким образом, нет NATIVE? или ACTION? и т. д. Таким образом, system/catalog/natives
– единственный способ выяснить это.)
num: 0
foreach [w val] lib [if type? :val = native! [++ num]]
дает мне 700 в "свежей" сборке ребол-3
type? :val = native!
это ЛОГИКА!
- person HostileFork says dont trust SE; 31.12.2016
lib
? - person Geeky I   schedule 30.12.2016lib
— это псевдоним для того же контекста, что иsystem/contexts/lib
. Именно сюда помещаются все определения начальной загрузки. Пользовательский контекст, в котором вы обычно пишете (system/context/user
), изначально является копией этих определений. Но lib по-прежнему доступен, поэтому, даже если вы перезапишете что-то вродеprint: func [x] [...]
, вы сможете вернуться к исходному определению черезlib/print
. - person HostileFork says dont trust SE   schedule 31.12.2016lib
это всего лишь rebol3 - person Geeky I   schedule 01.01.2017