我正在使用Dyalog APL,但我发现某些功能在gnu-apl中不可用.这两个APL实现和所有其他APL实现之间是否存在很大差异?什么是最常用的APL编译器?
使用JI正在尝试执行类似于Bernard Legrand(2009)的Mastering Dyalog APL第128页上显示的以下示例的操作。我无法找到此代码到J的直接转换,这就是我想要的。
这是示例:
Run Code Online (Sandbox Code Playgroud)BHCodes ? 83 12 12 83 43 66 50 81 12 83 14 66 etc... BHAmounts ? 609 727 458 469 463 219 431 602 519 317 663 631...13.3.2-第一个问题
我们将重点放在某些选定的国家(14、43、50、37和66)上,并计算其销售总额。首先让我们确定BHCode的哪些项目是相关的:
Run Code Online (Sandbox Code Playgroud)Selected ? 14 43 50 37 66 BHCodes ? Selected 0 0 0 0 1 1 1 0 0 0 1 1 0 1 0 ? Identifies sales in the selected countries only.然后,我们可以将此过滤器应用于金额,并将其相加:
Run Code Online (Sandbox Code Playgroud)(BHCodes ? Selected) / BHAmounts 463 219 431 …
当我尝试在 Dyalog APL 中分配名称时,收到以下错误消息之一:
SYNTAX ERROR: Can't change nameclass on assignmentSYNTAX ERROR: Invalid modified assignment, or an attempt was made to change nameclass on assignment“在分配时更改名称类”到底意味着什么,为什么不允许这样做,以及如何解决这个问题?
我需要在Dyalog APL中精确地工作.我知道⎕PP的值设定了精度,但我不能将它增加到18以上,所以我不能得到比18位更精确的数字,我需要操作大数字.有没有办法提高精度?
这是我最近测试的一个片段.它需要两个直径(?,?)并计算圆周长:
10{(?1×?){? ?}?1×?}10 ? note the brackets around ?
31.4159 31.4159
10{?1×?{? ?}?1×?}10
31.4159 98.696
Run Code Online (Sandbox Code Playgroud)
我想了解这个表达式的评估是如何工作的 - 为什么第一个正确评估,第二个不正确?
我正在使用Dyalog APL.
如何检查字符串是否被重塑?示例:“aab”返回 0,因为“a”无法重新整形为该字符串或任何其他更短的字符串。
\n另一个例子是“aabbaab”返回 1,因为“aabb”可以被重塑为该字符串。
\n很多例子都可以发现这一点:
\n101\nabba\nabcab\nabacedabarab\nabcdefedabc\n!@#~\xe2\x82\xac!\nRun Code Online (Sandbox Code Playgroud)\naA\n~\n[][][][]][-\nabcac\naecec\nRun Code Online (Sandbox Code Playgroud)\n是否有 lambda 函数可以完成此任务?
\n注意:如果您不熟悉 APL,请阅读此内容
\n在 APL 中,可以使用 构造广义内积f.g。根据手册,结果是一个数组,其中每个项目都是根据左操作数和右操作数的向量构造的f/x g\xc2\xa8y(x并且y是沿着所述操作数的特定轴获取的向量)。乍一看,外部产品似乎源自于此:它是\xe2\x88\x98.g,我通过设置 获得它f \xe2\x86\x90 \xe2\x88\x98。但是,如果我使用内积的定义来评估它,我似乎没有获得有效的 APL 代码(我得到了\xe2\x88\x98/x g\xc2\xa8y,其中\xe2\x88\x98/特别没有多大意义)。
这两个运算符是否与引擎盖下的某些魔法有关,或者\xe2\x88\x98.只是被解释为与内积无关的不同运算符?
APL 非常适合解决数组类型问题,但我很好奇如何最好地处理 APL 中的图形。我正在玩 leet 问题,例如问题662. 二叉树的最大宽度,该练习适用于具有值/左/右指针样式的 Node 对象,但是测试用例使用像[1,3,null,5,3]. 符号被压缩;未压缩的将是[[1], [3,null], [5,3,null,null]]. 逐层阅读给出[[1], [3], [5,3]](所以2是最宽的层)。
另一个例子,
\n[5,4,7,3,null,2,null,-1,null,9]给出答案 2\n
所以我不确定处理树木的惯用方法。我使用类吗?还是数组最好?在这两种情况下,我如何转换输入?
\n我想出了几个解决方案,但都感觉不优雅。(抱歉没有评论)
\n convert\xe2\x86\x90{\n prev \xe2\x86\x90 {(-\xe2\x8c\x882\xc3\xb7\xe2\x8d\xa8\xe2\x89\xa2\xe2\x8d\xb5)\xe2\x86\x91\xe2\x8d\xb5}\n nxt\xe2\x86\x90{\n \xe2\x8d\xb5\xe2\x89\xa1\xe2\x8d\xac:\xe2\x8d\xba\n m\xe2\x86\x902/\xc3\x97prev \xe2\x8d\xba\n cnt\xe2\x86\x90+/m\n (\xe2\x8d\xba,(m\\cnt\xe2\x86\x91\xe2\x8d\xb5))nxt(cnt\xe2\x86\x93\xe2\x8d\xb5)\n }\n\n (1\xe2\x86\x91\xe2\x8d\xb5)nxt(1\xe2\x86\x93\xe2\x8d\xb5)\n }\nRun Code Online (Sandbox Code Playgroud)\n或者,
\nconvert \xe2\x86\x90 {\n total\xe2\x86\x90(+/\xc3\x97\xe2\x8d\xb5)\n nxt\xe2\x86\x90{\n double\xe2\x86\x90\xc3\x971,2\xe2\x86\x932/0,\xe2\x8d\xb5\n (((+/double)\xe2\x86\x91\xe2\x8d\xba)@\xe2\x8a\xa2)double\n }\n \xe2\x8d\xb5 nxt\xe2\x8d\xa3{(+/\xc3\x97\xe2\x8d\xba)=total}1\n }\n\nRun Code Online (Sandbox Code Playgroud)\n两种解决方案都受到限制,因为它们假设0是null。
一旦我解压了输入,它就只是按其顺序分层的问题
\n\xe2\x8c\x88/(1+\xe2\x8c\x88/-\xe2\x8c\x8a/)\xe2\x88\x98\xe2\x8d\xb8\xc2\xa8\xc3\x97nodes\xe2\x8a\x86\xe2\x8d\xa8\xe2\x8d\xb82*\xc2\xaf1+\xe2\x8d\xb3\xe2\x8c\x882\xe2\x8d\x9f\xe2\x89\xa2nodes\nRun Code Online (Sandbox Code Playgroud)\n在Python中,我可以使用其他方法来遍历,即在每个深度的基础上跟踪最左/最右的节点。
\n注意:这可能是两个问题,一个是解压缩,另一个是如何遍历一般图,但一个取决于另一个
\n