【发布时间】:2015-03-10 07:11:40
【问题描述】:
从 J 中的表达式中提取名词作为参数的系统方法是什么?需要明确的是,包含两个文字的表达式应该成为使用左右参数而不是文字的二元表达式。
我正在尝试学习默认风格,所以如果可以避免的话,我宁愿不使用命名变量。
一个具体的例子是我做的一个简单的掷骰子模拟器:
>:?10#6 NB. Roll ten six sided dice.
2 2 6 5 3 6 4 5 4 3
>:?10#6
2 1 2 4 3 1 3 1 5 4
我想系统地将参数 10 和 6 提取到表达式的外部,以便它可以掷出任意数量的任意大小的骰子:
d =. <new expression here>
10 d 6 NB. Roll ten six sided dice.
1 6 4 6 6 1 5 2 3 4
3 d 100 NB. Roll three one hundred sided dice.
7 27 74
请随意使用我的示例进行说明,但我希望能够遵循任意表达式的过程。
编辑:我刚刚发现使用 x 和 y 引用的版本可以使用例如自动转换为默认形式。 13 : '>:?x#y'。如果有人可以告诉我如何找到13 : 的定义,我也许可以回答我自己的问题。
【问题讨论】:
-
你的意思是
d =. 4 :'>:?x#y'? (或d =. [: >: [: ? #) -
@Eelvex 请后者。引用定义的推导已经很清楚了,但我想看看人们如何从内联常量到一般的有上限的分叉版本。
-
第一步:根据词汇使用原语。第 2 步:使用forks and hooks 创建更复杂的动词。第 3 步:使用
@和&处理更复杂的动词。 -
您是否正在寻找一组可以遵循的规则,以便将任何显式定义转换为默认定义?如果
13 :不能每次都这样做,我很确定转换有一些艺术。 -
@Dane 这就是我一直在寻找的东西,但我可能有点天真。看起来它通常是无法实现的,但有多种有用的程序适用于许多情况。 tangentstorm 和 algorithmshark 为这些案例提供了充足的帮助。 :)
标签: refactoring j tacit-programming