gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:28:22 25 4
gpt4 key购买 nike

我有一个复杂的盒子,

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com