省略赋值时出错“无错误”

时间:2013-11-08 17:54:03

标签: variable-assignment assignment-operator apl

我正在玩APL做this problem

我定义了以下功能:

∇ r ← smallestFactor n
    ⍝ Find smallest factor of n
    r ← (0 = r) + r ← 1 ↑ (0 = r | n) / r ← 1 ↓ ⍳ n
∇

∇ r ← factors n; sf
    ⍝ List of all prime factos of n, repeated according to their power
    r ← ⍳ 0
    → (1 = n) / 0
    r ← sf, factors n ÷ sf ← smallestFactor n
∇

∇ r ← c count iter
    ⍝ Count occurances of c in iter
    r ← +/ (c = iter) / 1
∇

现在当我执行以下操作时,我得到了预期的结果(232792560):

×/ twenty * ⌈/ twenty ∘.count facs ← factors ¨ twenty ← 1 ↓ ⍳ 20 

但是当我省略对facs的任务时,它失败了:

×/ twenty * ⌈/ twenty ∘.count factors ¨ twenty ← 1 ↓ ⍳ 20 

==============================================================================
Assertion failed: 0
in Function:      init
in file:          Cell.cc:47

Call stack:

----------------------------------------
-- Stack trace at Cell.cc:47
----------------------------------------
0x7f713e200ea5 __libc_start_main
0x4314dc  main
0x4f34bd   Workspace::immediate_execution(bool)
0x4545cd    Command::process_line()
0x452f26     Command::process_line(UCS_string&)
0x44030f      Bif_OPER2_PRODUCT::eoc_outer_product(Token&, _EOC_arg&)
0x43ffac       Bif_OPER2_PRODUCT::finish_outer_product(OUTER_PROD&)
0x44a309        Cell::init(Cell const&)
0x43c2ca         do_Assert(char const*, char const*, char const*, int)
========================================

SI stack:

Depth:    0
Exec:     0x9f3310
Pmode:    ◊  ×/ twenty * ⌈/ twenty ∘.count factors ¨ twenty ← 1 ↓ ⍳ 20
PC:       12 /
Stat:     ×/ twenty * ⌈/ twenty ∘.count factors ¨ twenty ← 1 ↓ ⍳ 20
err_code: 0x0
thrown:   at StateIndicator.cc:38
e_msg_1:  'No Error'
e_msg_2:  ''
e_msg_3:  ''


==============================================================================
*** immediate_execution() caught other exception ***

我正在使用GNU APL,所以我没有花哨的dfuns。

我实际上没有看到两个陈述之间的区别。

从哪里出现这个错误?

2 个答案:

答案 0 :(得分:2)

没有在Dyalog APL中使用您的确切传统函数定义进行分配,它工作正常。直接来自会议:

     ×/ twenty * ⌈/ twenty ∘.count facs ← factors ¨ twenty ← 1 ↓ ⍳ 20
232792560
     ×/ twenty * ⌈/ twenty ∘.count factors ¨ twenty ← 1 ↓ ⍳ 20
232792560

看起来它一定是GNU APL中的错误。

此外,用于计算it中c的出现的表达式可以简单地写为:

r←+/c=iter

答案 1 :(得分:1)

这是解释器中的一个错误 - 我会调查它。

如果您看到解释器输出如上所述“断言失败”或 显示堆栈转储然后这始终是解释器的内部错误 并应直接向bug-apl@gnu.org报告。

尔根

PS。现在应该修复,请参阅SVN存储库中的最新版本..