j - 如何修改框中的数据? (J编程)

标签 j

我有一个复杂的盒子,

a =: 1 2 3 ; <4 ; < 5 6; <7 8
┌─────┬─────────────┐
│1 2 3│┌─┬─────────┐│
│     ││4│┌───┬───┐││
│     ││ ││5 6│7 8│││
│     ││ │└───┴───┘││
│     │└─┴─────────┘│
└─────┴─────────────┘

假设我知道内框 [5 6] 的地址是 ( 1 1 0 ),即可以这样提取数据:
    >0{>1{>1{a
5 6

我的问题是,如何写一个函数(动词)来修改给定地址的数据?
例如地址 ( 1 1 0 ) 已知,我想将值 (5 6) 更改为一个小框 (<123),输出应为:
┌─────┬───────────────┐
│1 2 3│┌─┬───────────┐│
│     ││4│┌─────┬───┐││
│     ││ ││┌───┐│7 8│││
│     ││ │││123││   │││
│     ││ ││└───┘│   │││
│     ││ │└─────┴───┘││
│     │└─┴───────────┘│
└─────┴───────────────┘

可能通过递归函数来实现,但是我想知道地址是否可以直接应用,就像>0{>1{>1{a.

谢谢您的帮助!

最佳答案

您可以使用 monadic 原语 map 确定要替换/修改的项目的地址( 1;1;0 ) ( {:: ):

   a=: 1 2 3;<4;<5 6;7 8
   {:: a
┌───┬─────────────────────────┐
│┌─┐│┌─────┬─────────────────┐│
││0│││┌─┬─┐│┌───────┬───────┐││
│└─┘│││1│0│││┌─┬─┬─┐│┌─┬─┬─┐│││
│   ││└─┴─┘│││1│1│0│││1│1│1││││
│   ││     ││└─┴─┴─┘│└─┴─┴─┘│││
│   ││     │└───────┴───────┘││
│   │└─────┴─────────────────┘│
└───┴─────────────────────────┘
{::的二进形式, fetch , 将从嵌套结构中返回项目。
   (1;1;0) {:: a
5 6

不幸的是,目前没有 }::相当于 amend ( } ) 虽然有一个 recent request实现原语 }::在具有您想要的功能的解释器中。

在我们等待实现该原语的同时,通过 J Programming 论坛文件回溯搜索发现 a post建议使用以下递归副词来满足您的要求:
store=: adverb define
:
  if. #m do. (< x (}.u)store ({.u){::y) ({.m)} y else. x end.
)

   (<123) (1;1;0) store a
┌─────┬───────────────┐
│1 2 3│┌─┬───────────┐│
│     ││4│┌─────┬───┐││
│     ││ ││┌───┐│7 8│││
│     ││ │││123││   │││
│     ││ ││└───┘│   │││
│     ││ │└─────┴───┘││
│     │└─┴───────────┘│
└─────┴───────────────┘

我看到你的问题也已经asked and answered on the J Forum .为了完整起见,我添加了一个链接 more general solution .
   (<123) [ applyintree (1;1;0) a
┌─────┬───────────────┐
│1 2 3│┌─┬───────────┐│
│     ││4│┌─────┬───┐││
│     ││ ││┌───┐│7 8│││
│     ││ │││123││   │││
│     ││ ││└───┘│   │││
│     ││ │└─────┴───┘││
│     │└─┴───────────┘│
└─────┴───────────────┘

关于j - 如何修改框中的数据? (J编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288689/

相关文章:

multithreading - 多核 J -- 并行化

j - Linux 上的 Jbrk 在哪里?

j - 在 J 中打开具有自定义填充值的框

j - 钩子(Hook)在字面短语中起作用,但在分配给变量时不起作用

j - 如何正确使用(0 : 0) in verbs

J 如何让方程自相乘?

j - 在 APL 中,如何将向量(长度为 n)转换为对角矩阵(nxn)?

J 脚本中的输入字符串挂起

operators - J:牛顿法的隐性副词

j - 为什么右边的动词 ] 有返回值,而左边的动词 [?