试图修改带有索引的字符串时出现语法错误
我正在从为什么我会遇到此语法错误? 'computer' [ 1 2 3 ] ← 'COM' SYNTAX ERROR 'computer'[1 2 3]←'COM' ^ 但是,如果我将'computer'保存在变量中,则不会收到错误: T ← 'computer' T computer T[1 2 3] ← 'COM' T COMputer 我在做什么错? 解决方案 'computer'是一个常数,您无法更改常数本身的值,只有变量的当前值. 考虑一下:如果您可以分配给'computer',那么下次您写'computer'时,您是否希望结果为COMputer? 2←3怎么样?显然,这没有任何意义. 但是,您 can 使用相对较新的@" at oterator"(不包括在中包含dyalog apl apl ,但 'COM'@1 2 3⊢'computer' COMpute
12 2023-11-13
编程技术问答社区
APL中扫描操作员的时空复杂性是多少?
通常,scan左右变体都在空间和时间上都是o(n).但是,似乎APL的\运算符就像scanl,但行为的行为不同,因为它是正确的关联并每次都在数组上运行,使其成为O(n^2). 例如, nums ← 10?10 ⍝ 1 7 4 5 10 3 9 6 2 8 ⌈\nums ⍝ 1 7 7 7 10 10 10 10 10 10 给了我正确的行为,但正确的关联性等于 (1 f (7 f (4 f (5 f (10 f (3 f (9 f (6 f (2 f 8))))))))) ⍝ where f ← (⊣,⌈) 所以最后一个操作是1 f (7 7 7 10 10 10 10 10 10) 这不是效率低下的,这里的实际复杂性是什么和/或有一些惯用性优化? 解决方案 您在算法描述扫描中正确,在一般情况下,确实是O(n²).但是,到目前为止,它最常见的用途是一组已知的标量原始素(包括+,∨,∧,∧,⌈,⌊,
2 2023-10-21
编程技术问答社区
APL中的条件函数
在任何apl方言中,是否有条件函数的符号或众所周知的成语? 我敢肯定我缺少某些内容,因为它是一个基本的语言元素.在其他语言中,它称为条件运算符,但我会在这里避免使用该术语,因为APL运算符完全是其他的. 例如C和朋友有x ? T : F Lisps具有(if x T F) Python具有T if x else F 等等. 我知道现代APL有:If和朋友,但是它们是控制程序流的势在必行的陈述:它们不返回值,不能在表达式内使用,并且当然不能应用于布尔值阵列.他们的目的完全不同,这对我来说很好. 我可以想出的唯一体面的表达方式是(F T)[⎕IO+x],尽管它完成了工作,但我看上去并不特别速记或可读,即使在数组上也是如此: ('no' 'yes')[⎕IO+(⍳5)∘.>(⍳5)] no no no no no yes no no no no yes yes no no no yes yes yes no no yes ye
4 2023-10-17
编程技术问答社区
如何在APL中把一个数字拆成它的位数
在APL中,如何将整数或数字拆分为包含其数字的向量?这样做的最简洁的方法是什么? 解决方案 您可以将Decode的倒数与基础10: 使用 10⊥⍣¯1⊢ 因为Decode将根据需要摄入尽可能多的数字并解码它们,因此它的逆数将占用一个数字并将其编码为尽可能多的数字, 或,使用⎕IO←0,您可以尝试在数字向量中找到格式的数字的索引: ⎕D⍳⍕ 两个解决方案的演示. 这比Encode的丑陋用法更好,并通过将10的数组分解为输入的日志 10 的长度: 的长度. {⍵⊤⍨10⍴⍨⌈10⍟1+⍵} 其他解决方案 我通过首先应用格式在APL2中进行此操作,然后执行每种格式(尽管可能仅限于正整数): ⍎¨⍕ 其他解决方案 不是最简洁的,但是这样做的力量是最早的APL.
34 2023-09-08
编程技术问答社区
在APL中有效执行scanl的正确方法是什么?
从我的上一个问题,似乎APL在O(n^2)中执行SCANL,但是编译器足够聪明,可以优化简单的原始词.那么将\应用于非简单功能的最佳策略是什么?此外,在许多情况下,正确的关联性确实会影响结果,例如: {0⌈⍺+⍵} \ 3 ¯4 1 5 ¯1 ¯2 ¯3 2 0 4 ⍝ 3 0 3 5 4 5 5 5 5 5 这不是我期望的答案3 0 1 6 5 3 0 2 2 6 解决方案 我偶然发现了一种可能的解决方案,但不知道它是最惯用的. s←0 ⋄ ↑{s⊢←0⌈s+⍵}¨ 3 ¯4 1 5 ¯1 ¯2 ¯3 2 0 4 正确地给了我3 0 1 6 5 3 0 2 2 6
6 2023-06-29
编程技术问答社区
在Linux 20.04上添加APL键盘布局
我想开始在 apl编程语言中开始编码.但是为此,我需要正确的键盘布局! 这是我正在寻找的行为列表: 可以与其他布局(我们,fr ...)一起使用 布局可与普通快捷方式 super + space 理想情况下可以使用本机Ubuntu"区域和语言" GUI接口来管理 我已经找到了其他类似的stackoverflow答案: linux上的apl keymapping(gnu apl apl apl apl apl apl apl apl ) 但是发生的是我的法语键盘被APL替换! 我还发现消息人士说,我应该能够用ubuntu本地添加它: https://www.sacrideo.us/configuring-your-apl-keyboard-keyboard-onlinux/ ,但我用语言和输入找不到它: 谢谢您的帮助! 解决方案 根据文档gsettings set org.gnome.desktop.input-sources show-al
20 2023-06-25
编程技术问答社区
在SQL中,我怎样才能生成5!56的每个可能的唯一组合?
i有一个表"元素",其中一个列"数字",键入包含数字1的thru 56.我如何使用SQL语句? 在apl(编程语言)中,一个简单的二元函数5!56做技巧! 编辑:在良好的Ole MS-DOS QBASIC中,我这样完成了: 10 OPEN "C:\5NUMBERS.OUT" FOR OUTPUT ACCESS READ WRITE AS #1 12 LET SER = 0 15 LET E = 56 30 FOR B5 = 5 TO E 40 FOR B4 = 4 TO E 50 FOR B3 = 3 TO E 60 FOR B2 = 2 TO E 70 FOR B1 = 1 TO E 80 88 IF B5 = B1 THEN 190 89 IF B5 = B2 THEN 190 90 IF B5 = B3 THEN 190 9
10 2023-05-13
编程技术问答社区
是否有任何APL的开源实现?
我知道J&K;但是两个都是开源的. 我也知道a+,但这似乎已经过时了. 是否有APL的不错的开源实现? 如果是这样,在哪里?如果不是,为什么? 解决方案 我正在使用JavaScript(http://github.com/ngn/apl)中的APL解释器进行实验,在Node.js或浏览器中运行.它可以做基本的事情,例如计算一代康威的生活游戏,但是还早就可以判断它可以变成体面的实施. 其他解决方案 您可以尝试NARS2000(在 http://www.nars2000.org/).我自己没有尝试过它,所以不能评论它与商业口译员的比较. 其他解决方案 kona 是一个基于开放的ASCII APL,灵感来自K.
38 2023-05-11
编程技术问答社区
我如何去计算一个数组中每个字母数字的数量?(APL)
我无法弄清楚如何采用矩阵并计算每一行的字母数值的数量.我只会使用我要计算的值的矩阵. 例如,如果我得到: ABA455 7L9O36G DZLFPEI 我会得到一排之类的东西:第一行,每行都会独立计数. 我最想了解使用的操作员,如果您也可以解释一下. 谢谢. 解决方案 以下内容应在任何主流APL实施中起作用. 让我们从一个简单的字符向量开始: m ← 3 7⍴'ABA455 7L9O36GDZLFPEI' v ← m[1;] v ABA455 我们可以通过过滤来找到独特的字符,以使其仅保持与自己的第一次出现相同索引的元素: v ⍳ v 1 2 1 4 5 5 7 ⍳ ⍴ v 1 2 3 4 5 6 7 ( v ⍳ v ) = ⍳ ⍴ v 1 1 0 1 1 0 1 ⎕ ← unique ← (
22 2023-04-08
编程技术问答社区
在APL中创建身份矩阵的最习惯的方式
根据 rosetta code ,有两种惯用方法在apl: 1. ID←{∘.=/⍳¨ ⍵ ⍵} 2. ID←{⍵ ⍵ ρ 1, ⍵ρ0} (2)如何工作?为什么这比(1)使用的(1)更好,后者使用了APL中被视为惯用方法的外部产品? 解决方案 如果您比较了两个表达式的性能,则2显然赢了: cmpx'{∘.=/⍳¨ ⍵ ⍵}1000' '{⍵ ⍵ ⍴ 1, ⍵⍴0}1000' {∘.=/⍳¨ ⍵ ⍵}1000 → 2.4E¯3 | 0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕ * {⍵ ⍵ ⍴ 1, ⍵⍴0}1000 → 5.7E¯5 | -98% ⎕ 如果您考虑解释器在处理两个表达式时必须要做什么,则(2)的工作也少得多:将标量与VEC相结合并重塑结果,而在(1)中,它必须创建两个向量,建立具有相同比较的外部产品.另
6 2023-03-22
编程技术问答社区
在APL中如何使用等级运算符来代替每个运算符
我有 dummytxt←'abcdefghijk' texttoadd←'down' rfikv←20 30 50 需要以下输出 defghijk20down defghijk30down defghijk50down 我可以做到: scenv←(¯10↑¨(⊂dummytxt),¨⍕¨rfikv),¨⊂texttoadd ,但是请帮助我在没有每个操作员的情况下写作,但使用等级⍤ 我使用dyalog apl,但请不要使用火车. 谢谢 解决方案 使用 (例如f¨x)的表达式可以用等级表示为{⊂f⊃⍵}⍤0⊢x(请注意,⊢是要分开数组右操作数,0来自数组正确参数x).换句话说,关于论点的标量,我们: 披露标量:⊃⍵ 应用功能:f⊃⍵ 封闭结果:⊂f⊃⍵ 类似的表达适用于二元案例,x f¨y,但我们需要: 披露两个标量:(⊃⍺)…(⊃⍵) 应用功能:(⊃⍺)f(⊃⍵) 包含结果:⊂(⊃⍺)f(⊃⍵) 这给
32 2023-03-18
编程技术问答社区
在APL中尝试使用数组时出现的问题。我错过了什么?
我显然错过了有关如何从APL中提取元素的一些事情,并希望有人能看到我错过的东西以及我应该如何以有意义的方式复制的方式获得预期结果. 我在学习APL方面是相对较新的,我更习惯了诸如Python和C之类的语言. 考虑以下代码,请告诉为什么(由我)结果, ┌→─────┐ │42 666│ └~─────┘ 被嵌入了更复杂的事物中,可能是一种解决方案 那个问题. (使用Dyalog APL/S-64,16.0.30320) ⎕io ← 0 a ← 17 4711 (42 666) z ← a[2] an_expected_vector←42 666 ]DISPLAY an_expected_vector ┌→─────┐ │42 666│ └~─────┘ ]DISPLAY z ┌──────────┐ │ ┌→─────┐ │ │ │42 666│ │ │ └~─────┘ │ └∊─────
22 2023-02-01
编程技术问答社区
将C++函数跨平台化为APL
我目前正在为APL编写C ++程序.到目前为止,我一直在做的是在APL中创建一个函数,该函数运行命令提示符并调用可执行文件,并使用其创建的输入和输出文件作为参数创建,然后依次将C ++可执行文件编程为打开输入文件,读取输入并将输出存储在输出文件中,该输出文件由APL函数获取并存储在一个或多个变量中.这种方法的问题在于,当我使用更简单的函数时,这些功能将被大量或有时递归地调用,请始终打开和关闭文件以进行简单的计算占用很多处理时间.我试图找出的是一种调用C ++(从解决方案或库中编写的函数)的方法,并直接在我的APL Workspace中使用. 例如,我以这种形式编写的C ++功能: Xadd(int x, int y); 并希望在这样的Xadd (x) (y)中写入它,并以后能够使用∇Xadd通过APL打开它.谢谢. 解决方案 如果您是从APL调用CPP功能,反之亦然.而且您没有指定您要编码的APL,但您可能需要检查这些概念: 共享变量:⎕SVO 辅助处理
14 2022-10-04
编程技术问答社区
APL中的错误处理
我目前正在为班级制作APL程序,并遇到了错误处理的问题. 在我制作的功能中,我想检查一下输入是整数.如果不是这样,我想返回错误消息,并且不运行其余功能.到目前为止,我比较它是否与自身的地板相等.如果没有,我不希望该功能运行并希望它停止.如果我放置4.2并提供错误消息,它可以工作,但是如果我将类似'A'>>>>>> 'ABCDEF'的内容不起作用,并且只会给出正常错误.我尝试做一个尝试捕获声明,但是当我在功能中:Try时,它给了我一个错误. 这不是我想要的.我该如何使其以错误消息结束,而不是继续输入是字符或字符串的结尾?我知道我可以将整个代码放在IF块中,但这似乎确实不必要. 我的代码在纯文本中: TESTER Q;error :If Q≢⌊Q 'Possible' :Else 'Not Possible' :EndIf 'Again, Possible' 和作为屏幕截图: 解决方案 如果您想提早戒烟以避免将整个代码封闭在:
48 2022-09-11
编程技术问答社区
IBM主机上APL2中关于⊥的有趣的错误
在这种环境中,我们以消耗的服务单元数量来衡量效率.我将当前的 dateTime 转换为毫秒来说明错误: 0 100 100 100 100 100 1000⊥⎕TS ⍝ this statement consumes around 150 SUs 0 100 100 100 100 100 1000.0⊥⎕TS ⍝ this statement consumes around 5 SUs 这里发生了什么?好吧,通过将 .0 附加到左侧参数中的任何术语,我们告诉解释器进入浮动模式.没有它,它首先尝试使用整数处理操作,注意到它不工作,然后在浮点模式下重试. 同样的技巧可以用在右边的参数上,或者添加 0.0,或者乘以 1.0. 解决方案 我想会发生以下情况:(一个人的猜测) 0 100 100 100 100 100 1000 在 Dyalog 中是 16 位整数向量,在 APL2 中可能是 32 ⊥ 通常会返回更宽的左侧或右侧参数类型
138 2022-08-10
编程技术问答社区
将日期(年月日)转换为日计数
我想要一个函数(使用公历规则)给定 3⍴⎕TS 将返回 1+ 自 1 1 1 以来的天数.例如,如果函数名为 X: X¨ (1 1 1) (1 12 31) (2 12 31) (3 12 31) (4 12 31) 1 365 730 1095 1461 我需要这个,所以我可以减去两个日期来找出它们之间的天数. 解决方案 请看下面的例子 - 函数 X 假设索引原点 1 如下: r←X b r←(0 31 59 90 120 151 181 212 243 273 304 334)[b[2]] r←r+b[3]+(365×b[1]-1)+-/⌊(b[1]-3>b[2])÷4 100 400
1262 2022-08-10
编程技术问答社区
如何在Dyalog APL中使用等级运算符建立自己的每个运算符
我在这个问题中看到了答案如何在 APL 中使用 rank 运算符而不是 each 如何使用 Rank ⍤ 构建自己的 Each 运算符. Monadic 每个f¨x都可以表示为{⊂f⊃⍵}⍤0⊢x Dyadic 每个 x f¨y 都可以表示为 x{⊂(⊃⍺)f(⊃⍵)}⍤0⊢y 就此请回答以下问题: 为什么每个 ¨ 运算符都可以表示为 Each←{⍺←⊢ ⋄ ⍺ ⍺⍺{×⎕NC'⍺':⊂(⊃⍺)⍺⍺(⊃⍵) ⋄ ⊂⍺⍺⊃⍵}⍤0⊢⍵} 上面表达式中的⍺⍺是什么意思 提前感谢您的回答. 解决方案 这个定义基本上结合了你上面列出的一元和二元情况.如果 ⍺ 存在,×⎕NC'⍺' 将返回 1,否则返回 0,因此它会检查您是单子还是双子使用 Each. ⍺⍺ 是 dop Each 的左操作数.它是 x f Each y 或 f Each y 中的 f
122 2022-08-10
编程技术问答社区
APL相对于A相对于J相对于K?
数组语言环境虽然引人入胜,但令人困惑不已.有理由选择 J 或 K 或 APL 或 A 之一吗?这些选项似乎都不是开源的——有开源版本吗?我很想扩展我的思维,但我仍然感到困惑. 解决方案 这些语言之间的差异是比较细微的.APL“正确"具有原始符号表示法的优点和缺点.(这些年来对符号集进行了一些细微的更改,但它们都对原始愿景足够真实.) A+ 语言是开源的.它与“经典"APL 大相径庭,但与它们一样保留了大部分核心字符集.我的感觉是它没有跟上技术变化的步伐.它是 K 的前身. 数组语言家族中脱离独特 APL 字符集的语言包括 J、K 和 Nial.Nial 使用英文单词而不是符号,并且有一个名为 Q'Nial 的开源解释器.K 和 J 主要依赖于符号,但这些都是从 ASCII 字符集中提取的.在这些语言中,单词可以用来代替符号,但是,只需分配定义即可. 自 1964 年 APL 作为 IBM 产品首次出现以来,APL 系列编程语言一直主要是专有的.此时,专有数组语言
290 2022-08-10
编程技术问答社区
APL中的升序红心数
在FinnAPL成语库中,第19项被描述为“升序基数(排名,全不同)",代码如下: ⍋⍋X 我还发现了一个 解决方案 升序基数 为了方便起见,我将这个小代码片段称为“排名".当您开始将等级应用于二进制数时,它会变得很明显.例如: X←0 0 1 0 1 ⍋⍋X ⍝ output is 1 2 4 3 5 输出指示排序后值的位置.您可以从输出中看到,两个 1 将在最后两个插槽 4 和 5 中结束,而 0 将在位置 1、2 和 3 中结束.因此,它为向量的每个值分配了排名.将其与升级进行比较: X←7 8 9 6 ⍋X ⍝ output is 4 1 2 3 ⍋⍋X ⍝ output is 2 3 4 1 您可以将升级视为此职位获得该数字,您可以将排名视为此数字获得该职位: 7 8 9 6 ⍝ values of X 4 1 2 3 ⍝ position
122 2022-08-10
编程技术问答社区