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

Ell*_*e Y 5 j

我有一个复杂的盒子,

a =: 1 2 3 ; <4 ; < 5 6; <7 8
?????????????????????
?1 2 3???????????????
?     ??4????????????
?     ?? ??5 6?7 8???
?     ?? ????????????
?     ???????????????
?????????????????????
Run Code Online (Sandbox Code Playgroud)

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

    >0{>1{>1{a
5 6
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何编写一个函数(动词)来修改给定地址的数据?例如地址(1 1 0)是已知的,我想将值(5 6)更改为一个小方框(<123),输出应为:

???????????????????????
?1 2 3?????????????????
?     ??4??????????????
?     ?? ????????7 8???
?     ?? ???123??   ???
?     ?? ????????   ???
?     ?? ??????????????
?     ?????????????????
???????????????????????
Run Code Online (Sandbox Code Playgroud)

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

谢谢您的帮助!

Tik*_*anz 4

您可以使用单子原始映射( 1;1;0) 确定要替换/修改的项目的地址( ):{::

\n\n
   a=: 1 2 3;<4;<5 6;7 8\n   {:: a\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\n\xe2\x94\x82\xe2\x94\x820\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x82\xe2\x94\x821\xe2\x94\x820\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x82\xe2\x94\x821\xe2\x94\x821\xe2\x94\x820\xe2\x94\x82\xe2\x94\x82\xe2\x94\x821\xe2\x94\x821\xe2\x94\x821\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n\n

{::的二元形式fetch将从嵌套结构中返回项目。

\n\n
   (1;1;0) {:: a\n5 6\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,尽管最近有一个请求在解释器中实现具有您想要的功能的原语,但目前还没有}::amend ( ) 等效的方法。}}::

\n\n

当我们等待该原语实现时,通过搜索 J 编程论坛档案发现了一篇帖子,其中建议使用以下递归副词来完成您所要求的操作:

\n\n
store=: adverb define\n:\n  if. #m do. (< x (}.u)store ({.u){::y) ({.m)} y else. x end.\n)\n\n   (<123) (1;1;0) store a\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x821 2 3\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x824\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x827 8\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x82\xe2\x94\x82123\xe2\x94\x82\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n\n

我看到您的问题在 J 论坛上也有人提出并得到解答。为了完整起见,我添加了指向该更通用解决方案的链接。

\n\n
   (<123) [ applyintree (1;1;0) a\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x821 2 3\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x824\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x82\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x94\x827 8\xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x82\xe2\x94\x82123\xe2\x94\x82\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82   \xe2\x94\x82\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x82 \xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n