以下表达式显示了16个基本布尔运算中的每一个的真值表:
(0 b./; 1 b./; 2 b./; 3 b./; 4 b./; 5 b./; 6 b./; 7 b./; 8 b./; 9 b./; 10 b./; 11 b./; 12 b./; 13 b./; 14 b./; 15 b./) ~ i.2
?????????????????????????????????????????????????????????????????
?0 0?0 0?0 0?0 0?0 1?0 1?0 1?0 1?1 0?1 0?1 0?1 0?1 1?1 1?1 1?1 1?
?0 0?0 1?1 0?1 1?0 0?0 1?1 0?1 1?0 0?0 1?1 0?1 1?0 0?0 1?1 0?1 1?
?????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
如何在括号中重构该部分以删除重复?
澄清:
这里的目标不是生成表,而是学习如何动态生成新动词.为了减少括号的表情,我想以分解出的符号;
,/
和b.
,然后用替换数字i.10
.
该;
符号是很容易的:
;/i.16
???????????????????????????????????????
?0?1?2?3?4?5?6?7?8?9?10?11?12?13?14?15?
???????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
但是我很难找到从列表中的每个元素生成新动词的方法.
我想也许我正在寻找某种更高阶的组合器,它们允许使用&
和@
常量以外的东西.
例如,nn leftBondEach v
可能会使一个动词数组等效于n0 & v; n1 & v; ... ; nn & v
:
bverbs =: (i.16)(leftBondEach)b. NB. would mean (0 b.; 1 b.; ...; 15 b.)
0 bverbs 0
?????????????????????????????????
?0?0?0?0?0?0?0?0?1?1?1?1?1?1?1?1?
?????????????????????????????????
0 bverbs 1
?????????????????????????????????
?0?0?0?0?1?1?1?1?0?0?0?0?1?1?1?1?
?????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我想我需要类似的东西才能附加/
到每个函数.
再说一次,这是J,并且可能有一种完全不同的方式来处理这些我还没有讨论过的问题.:)
关于什么:
<"2@|:@( (i.16) b./~) 0 1
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|0 0|0 0|0 1|0 1|0 0|0 0|0 1|0 1|1 0|1 0|1 1|1 1|1 0|1 0|1 1|1 1|
|0 0|0 1|0 0|0 1|1 0|1 1|1 0|1 1|0 0|0 1|0 0|0 1|1 0|1 1|1 0|1 1|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
只注意到$ (i. 16) b. /~ 0 1
2 2 16,你想要16个盒子,大小为2x2 ......