【问题标题】:How to repeat the evaluation of an expression in J?如何重复评估 J 中的表达式?
【发布时间】:2018-02-03 04:46:58
【问题描述】:

鉴于J中的以下表达式,我如何执行它n次?

6?99

我能想出的唯一解决办法就是把它变成一个动词,效果很好,但我怀疑有更好的方法:

(3 : '6?99')"0 i.100

现在,在任何人感到困惑之前,这个问题不是关于特定表达式6?99。这是关于 J 编程语言的一般问题。您的答案应该足够笼统,适用于任何 J 表达式,而不仅仅是6?99。

【问题讨论】:

  • 我认为一般来说没有更好的方法。也许如果你能构造一个副词或连词,你就可以搁置评估。例如。你可以设置v =: 6&? 并运行v (n $ 99)。见evaluating expressions
  • 还有一个想法是使用幂连词来跟踪其自身连续执行 4 次的结果。 (6?99"_)^:(>:i.4) ''

标签: j


【解决方案1】:

还是把它变成动词,但这次是默认

   (6 ? 99"_)"0 i.4
92 61 82  7 67 12
56 76 77 67  9 24
16 31  9 76 70 98
65 24  2 28  1 39

根据动词的不同,这可能比显式更简洁。

执行此操作的通常方法是复制左侧参数,但我感觉这不是您想要的?

   n=.4
   6 ? n $ 99
43 55 79 71 35 33
41 56 67  3 78 24
38 34  7 61 14 13
95 63 43 47 73 29

【讨论】:

  • 这不是我要找的,虽然它在 J 中肯定更惯用。我想看看如果表达式实际上是一个不可修改的“黑匣子”,该怎么做。
  • @GregoryHigley 您在问题中显示的方式是黑盒案例的惯用方法。 bob 采用代数解构和操纵特定表达式的答案的方法利用了 J'a 的更多优势,并将对语言产生更强的直觉(除了在智力上更令人满意),因此更常见。除了? 等非幂等的特殊情况之外,忽略输入的重复需要并不常见,因此更典型的是逐个处理每个表达式,而不是黑盒
  • @DanBron 同意。我对 J 足够熟悉,“代数解构”是我自己会采用的方法。当我写下这个问题时,我已经很清楚其他方法了,我已经做了很多年的 J-er。但是,我一直对探索 J 很感兴趣,并且很好奇“黑盒”方法会是什么。
  • 能否解释一下"_的作用?似乎它适用于 99,即 ` (6 ? (99"_))"0 i.4` 给出相同的结果。 99 的排名怎么可能不同于 0? (#$(99"_) 返回# $ 99"_,这应该是什么意思?)而?(Deal)是如何操作这个东西的?虽然(6 ? (99))"0 i.4 可以工作,但我会返回 4 个相同的列表。
  • 给定一个常数,例如99 无限等级99"_ 意味着无论给它什么参数,它都会返回值99。本质上,您将其设为一个动词,为所有参数返回 99。如果你给它一个等级0,那么参数的每个原子都将返回99你必须使用等级来使常数名词99变成一个动词,因为在fork`(#?99“_)`表单是 (V V V) 允许,而 (# ? 99) 或 (V V N) 不允许。您可以使用 (99 ?~ #),因为允许 (N V V) 并且 ?~ 反转参数。这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 2010-10-22
  • 2015-06-26
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多