#j
#j
Вопрос:
Я хочу самый простой глагол, который выдает список всех логических списков заданной длины.
например
f=. NB. Insert magic here
f 2
0 0
0 1
1 0
1 1
f 3
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Комментарии:
1.
(y#2) #: 2^y
и множество риффов на эту тему.
Ответ №1:
Эта функциональность была недавно добавлена в stats/base
аддон.
load 'stats/base/combinatorial' NB. or just load 'stats'
permrep 2 NB. permutations of size 2 from 2 items with replacement
0 0
0 1
1 0
1 1
3 permrep 2 NB. permutations of size 3 from 2 items with replacement
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
permrep NB. display definition of permrep
$:~ :(# #: i.@^~)
Используя Qt IDE, вы можете просмотреть определение скрипта permrep
и друзей, введя open 'stats/base/combinatorial'
в окне Term. В качестве альтернативы вы можете просмотреть это на Github.
Для определения f
, как указано в вашем вопросе, должно быть достаточно следующего:
f=: permrepamp;2
f=: (# #: i.@^~)amp;2 NB. alternatively
f 3
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Ответ №2:
#:
(«Antibase 2») на странице со словарем есть пример, близкий к тому, что я хочу. Я не совсем понимаю этот примитив, но следующий код выдает список базовых 2 цифр чисел от 0 до 2 ^ n-1:
f=. #:@i.@(2^])
(Спасибо Дэну за то, что заставил меня посмотреть #:
.)