【问题标题】:Making a range verb in J在 J 中制作范围动词
【发布时间】:2016-03-06 00:22:31
【问题描述】:

J 是我决定学习的一门很棒的编程语言。作为一个简单的练习,我决定模拟一个范围。有一个内置函数 i. 创建一个范围 0..i-1。使用一些数学方法,我知道这是ab 之间的范围:

 a + i. (b - a - 1)

成功了!我想。现在,转换为动词的“简单”任务摆在我面前。这是我现在的问题。我在动词+ 的两边都调用了a(左参数)。我曾想过使用 evoke,但我不确定如何使其发挥作用。

所以我的问题是:如何将a f (a g b) 或更具体地说,a f (a g b h c)(和类似形式)形式的表达式转换为纯动词?我不想使用明确的论据,那有什么乐趣呢? ;)

编辑我的解决方案是这样的:

range =: [(+i.)>:@-~

【问题讨论】:

  • 使用该解决方案效果很好,尽管您实际上不需要带 + 的 ~ 因为 + 是自反的。 range =: [(+i.)>:@-~ 应该也可以。
  • @bob 就是这样!谢谢!

标签: j


【解决方案1】:

要将x f (x g y) 形式的表达式转换为x h y 的形式,您可以使用二元分叉:

x (F G H) y = (x F y) G (x H y)

和身份动词:x [ y = x,制作:

x ([ f g) y  = (x [ y) f (x g y) = x f (x g y)

所以你要找的动词是h =: [ f g

【讨论】:

  • J 中的动词有右和(可选的)左参数;对于需要abc的动词,你不能有一个通用形式。通常其中一些会被装箱并作为一个参数传递。
  • 感谢您的宝贵帮助!
  • 我对J一无所知,但那些未闭合的方括号让我感到不舒服。
  • @flawr 你能感觉到我的痛苦:P
  • [ 返回两个参数的左边, ] 返回两个参数的右边。所以 a [ b 返回 a 并且 a] b 返回 b。它们在 J 中不用作方括号对,而是用作左右运算符。确实需要一点时间来适应,但在概念上并不难。
猜你喜欢
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2016-09-30
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多