Какой номер родной! в Rebol3

Как рассчитать количество нативных функций в Rebol3?

(help native! печатает собственные функции в lib, но не возвращает блок слов.)

ОБНОВЛЕНИЕ: я исправил вопрос после ошибки, выделенной @HostileFork.


person noein    schedule 30.12.2016    source источник
comment
что такое lib?   -  person Geeky I    schedule 30.12.2016
comment
Обратите внимание на этот тип ? :val = native! фактически type? (:val = native!), тип данных LOGIC!, который является истинным значением. Следовательно, это просто дает вам все объявления в lib.   -  person HostileFork says dont trust SE    schedule 31.12.2016
comment
@GeekyI lib — это псевдоним для того же контекста, что и system/contexts/lib. Именно сюда помещаются все определения начальной загрузки. Пользовательский контекст, в котором вы обычно пишете (system/context/user), изначально является копией этих определений. Но lib по-прежнему доступен, поэтому, даже если вы перезапишете что-то вроде print: func [x] [...], вы сможете вернуться к исходному определению через lib/print.   -  person HostileFork says dont trust SE    schedule 31.12.2016
comment
@HostileFork спасибо, сначала меня скинули, потому что lib это всего лишь rebol3   -  person Geeky I    schedule 01.01.2017


Ответы (2)


Каталог аборигенов (или хотя бы слов их имен) строится при загрузке:

>> 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 – единственный способ выяснить это.)

person HostileFork says dont trust SE    schedule 30.12.2016
comment
Спасибо @HostileFork, вы очень ясно выразились. Извините за глупую ошибку в коде (и думаю, что уже поздно исправлять вопрос). Почему в Ren-C нет разграничения между ФУНКЦИЯ!, ДЕЙСТВИЕ! и РОДНОЙ! ? - person noein; 31.12.2016
comment
@noein Посмотреть чат - person HostileFork says dont trust SE; 31.12.2016

num: 0
foreach [w val] lib [if type? :val = native! [++ num]]

дает мне 700 в "свежей" сборке ребол-3

person Geeky I    schedule 30.12.2016
comment
Я знаю. Их должно быть 150-200. По этой причине используемый мной метод неверен. - person noein; 30.12.2016
comment
type? :val = native! это ЛОГИКА! - person HostileFork says dont trust SE; 31.12.2016