将副词应用于动名词列表

2024-05-04

考虑一个动名词列表和一些我们希望循环应用它们的数据:

ms=.*`+`-     NB. list of gerunds
d =.3 4 5 6   NB. some data

我们可以做的:

ms/ d    NB. returns 9, ie, the result of 3 * 4 + 5 - 6

现在我们提出一个问题:如果我们改变动词的应用顺序,结果会如何变化?也就是说,我们考虑所有 6 种可能的顺序:

allms=. (A.~i.@!@#) ms

看起来像:

┌─┬─┬─┐
│*│+│-│
├─┼─┼─┤
│*│-│+│
├─┼─┼─┤
│+│*│-│
├─┼─┼─┤
│+│-│*│
├─┼─┼─┤
│-│*│+│
├─┼─┼─┤
│-│+│*│
└─┴─┴─┘

为了回答这个问题,我们可以这样做:

allms (4 : 'x/ y')"1 d

NB. returns 9 _21 _1 _23 _41 _31

但请注意,我被迫使用匿名,非默认的动词来完成这个任务。因为为了应用副词/,我必须有一个命名动词。当我真正想做的是治疗/就像排名 1 的动词并将其“映射”到我的列表中allms, 某物在精神上就像非法的表述一样:

/&d"1 allms  NB. This is invalid J

也就是说,对于列表中的每个动名词,用副词对其进行转换/并将其应用到数据中d.

J 似乎抵制这种高阶的“将动词视为数据”的思维。所以我想知道解决这个问题的自然方法是什么。

具体来说,您将获得动名词列表ms和数据d,如上所定义。任务是创建一个返回结果列表的动词ms/ d,对于每个可能的排序ms(即,返回的动词9 _21 _1 _23 _41 _31在我们的例子中)。动词必须是a默会动词.


你其实并不想要那样

有一些基本的语法原因导致您无法默认地对运算符(副词和连词)的参数进行切片和切块。

Without going into detail, allowing operators to be modified by other operators, like your proposed / modified with "1, would require a fundamental restructuring of J's grammar. And there would be major tradeoffs, in particular to simplicity and expressiveness (i.e. notational elegance)¹,².

因此,如果您想像这样将运算符分配给动名词,则必须为其编写实用程序,而迄今为止最直接的方法是使用显式代码。在此领域中需要考虑的一个预打包实用程序是doog脚本,可在 J Wiki 和 SVN 存储库中找到 http://code.jsoftware.com/wiki/User:Dan_Bron/Snippets/DOOG.

无论如何,这就是

但是,那doog脚本,就像你的方法一样,基本上是明确的。 因此,如果你真的想心照不宣地达到这些目的:

   D       =.   foo`bar`baz 
   t       =.   D / (@:])  NB. Here's our "over" (/)

   over    =.  [^:(D -: ]) L: (L.D) & (5!:1<,'t')
   allOver =:  (]^:[~ 1:`'' , over f.)~


   3 4 5 6 allOver"1~ (A.~i.@!@#) *`+`-       NB. Note the "1
9 _21 _1 _23 _41 _31

我警告过你

在不涉及太多细节的情况下,这里的技巧是使用动词]^:[允许^:执行任意原子表示作为输入。

那是,some_atomic_rep f^:[ data变成f^:some_atomic_rep data,对于合适的原子表示,它可以执行任何事情,同时使用动词可用的所有参数处理优点(特别是排名)。

剩下的只是一种优雅的(读:懒惰的)方法,将你的动名词输入(无论你为具有等级或其他参数选择机制的动词提供哪个部分)转换为适合右侧参数的原子表示^:.

The meat of it is we have the template D / (@:]) and we replace D with the gerund of your choice (the @:] is necessary because by the time the gerund gets executed, it'll have two inputs: your actual input, d, as well as itself, D)4.

裂口

要探访这些邪恶愚蠢行为的“Ultima Thule”,请查看以下发现:dont in J http://www.jsoftware.com/pipermail/programming/2013-January/031236.html,这就像do (".),除了......真的,你不应该。


¹ As a quick example: puzzle out what this would mean for precedence between wordclasses.

² Having said that, Jose "Pepe" Quintana, the leader of the underground J club F^4 (The Fully Fixable Functional Faction http://www.jsoftware.com/pipermail/programming/2009-December/017070.html), once found a backdoor that actually did allow operators to take other operators as inputs. See this message in the "J Myths Puzzles" thread from 2008 http://www.jsoftware.com/pipermail/programming/2008-February/009871.html (scroll past all the spoiler-hiding blank lines). Of course, once he mentioned it, Roger took notice, and immediately plugged the gap.

³ The way I once put it http://www.jsoftware.com/pipermail/programming/2006-December/004287.html was "Yes, dcog is ugly, but I like to think of it as Messiah Code: it's ugly so that other code doesn't have to be. A sponge for sin".

4 Take note, the template gerund foo`bar`baz can be anything you like, of any length, using any names. It doesn't matter. What does matter is that the names you use are either proverbs or undefined (which the interpreter treats like proverbs, by design). Using pronouns or pro-operators will break stuff. Alternatively, you could use another kind of noun, like simply __ or something (which I find mnemonic for fill in the ____).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将副词应用于动名词列表 的相关文章

  • HTML5(六)preserve and recover

    HTML5 六 preserve and recover 1 save the state of canvas context 2 So we have two method to save and restore the state of
  • 无向图的广度优先遍历和深度优先遍历

    public class MGraph private char vexs 顶点 private int edge 存储边的二维数组 private int arcNum 边的数目 private boolean visited 访问标志数
  • 一个例子告诉你什么是封装,继承和多态(C++ 代码实例) (一)

    add by WJB date 2018 08 30 面向对象的三大特性 封装 继承和多态 封装 将事物拥有的属性和动作隐藏起来 只保留特定的方法与外界联系 继承 子类可以拥有父类的属性和方法 多态 以说是 一个接口 多种实现 或者说是父类
  • 自制Web桌面日历

    想要一个带农历的桌面日历 google了半天也没有找到中意的 但是经常浏览网站的时候发现很多不错的日历 直接保存到我的桌面上不就完了吗 下面是具体操作 将中意的日历页面 查看源文件 看是否可以看到script文件 如果可以 就保存到本地 用
  • 不仅仅好看!30个优秀logo的设计思想分析

    拥有一个抢眼的Logo对企业来乃一大幸事 毕竟Logo千千万 但真正让人过目不忘的作品可是屈指可数 好的Logo必须量体裁衣 迅速传递出企业的价值和理念 本文里精选了30个经典的标志设计 并附上设计思想分析 相信会对你受益匪浅 Castle
  • 51信用卡管家app产品需求文档

    文章通过使用 体验 研究等方式倒推51信用卡管家APP 通过使用axure撰写PRD文档 51信用卡业务很多 文章只撰写部分核心功能点 另外 51信用卡通过和第三方合作 开展了账单导入 办信用卡 借款 投资理财等业务 文中如有相关错误 望指
  • ztree异步加载

    1 配置好参数 var setting ztreeSetting view showIcon false 前面文件夹显示状态 data key name MC 数据结构的属性由name改成MC async enable true url u
  • 求数组中连续n个元素使其和最大

    给定一个数组 求出数组中连续的一些元素使其和的值最大 如果所有元素都为正数 显然整个数组即为所求的 如果所有元素的值为负数 则所求的最大值为0 这是在编程珠玑上看到的 其时间复杂度由O n3 减为O n 了 public class Max
  • 根据相同主键,合并其他字段值,形成一条记录(oracle)

    将具有相同的主键INVT PROD ID值 其他列值CLAUSE MEMO CLAUSE TP CD BBCK DT使用 进行合并 形成一条记录 select INVT PROD ID MAX subStr CLAUSE MEMO 3 CL
  • 如何列出J中动词的代码

    在控制台中 输入不带参数的单个动词将打印其内容 tolower 3 0 x I 26 gt n 65 i 26 a i t y y x n 97 i 26 a x t 这对于开发来说很好 但在执行过程中无法利用 有没有办法动态地做到这一点
  • 修改数组的一行

    我刚刚开始学习J 有些东西我不知道如何正确做 例如 假设我想打印 2 个符号的棋盘 baba abab baba 为此 我假设您可以生成一个数组 baba baba baba 并反转第二行 生成数组很简单 3 4 ba 但倒车第二排是我挣扎
  • 为什么 VS 2008 不支持 J#,这种语言已经死了吗?

    MS 放弃 J 了吗 目前我们通过 J 程序集与软件集成 有谁知道2010年是否会得到支持 这是回答您问题的链接 http social msdn microsoft com Forums en US visualjsharpgeneral
  • J 中的笛卡尔积

    我正在尝试重现 J 中生命游戏功能的 APL 代码 搜索 APL 中的生命游戏 后可以找到解释此代码的 YouTube 视频 目前我有一个矩阵R这是 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0
  • 我可以将 vjslib.dll 放入应用程序的 /bin 目录中吗?

    我正在进行生产部署 不幸的是 我正在部署到一个严格控制的环境 今晚我不太可能获得运行完整 Visual J 可再发行 EXE 的许可 我们的应用程序当前抛出错误 表示找不到程序集 vjslib dll 我可以将其放入应用程序的垃圾箱中 然后
  • APL、A、J、K?

    数组语言的景观虽然令人着迷 但也令人困惑不已 有理由选择 J 或 K 或 APL 或 A 之一吗 这些选项似乎都不是开源的 有开源版本吗 我很想拓展我的思维 但我仍然感到困惑 这些语言之间的差异相对微妙 APL 正确 具有原始符号表示法的优
  • 如何在 Excel 宏中使用 JavaScript?

    Google 托管了一个非常酷的 diff 类 http code google com p google diff match patch http code google com p google diff match patch 我之
  • 将副词应用于动名词列表

    考虑一个动名词列表和一些我们希望循环应用它们的数据 ms NB list of gerunds d 3 4 5 6 NB some data 我们可以做的 ms d NB returns 9 ie the result of 3 4 5 6
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • J中如何写一个超过3个参数的函数?

    例如 函数g x y x z 怎么写 我知道如何编写带有两个参数的函数 一种方法是使用变量匹配 f 3 0 x y z y x y x z f 1 2 3 0 5 f 1 2 3 0 5 f 1 5 2 0 5 0 5 另一种方法是将变量视
  • 列出 J 中数字的数字

    我使用的编程语言 J 我想将一个数字的所有数字放入一个列表中 From 12345 to 1 2 3 4 5 我能做些什么 我写这个的方式是 10 1 我们可以看到它与这句话的使用 10 1 123456789 1 2 3 4 5 6 7

随机推荐