Ave,
I have two problems with outer product in GNU APL; one of them is maybe
a bug, the other is nearly definitely a bug.
If I use the product with a standard function like ×, everything works
as it should:
∘.×/ (5 2) (7 6 4)
35 30 20
14 12 8
However, if I replace it with a custom function, it does something
different:
∘.{⍺×⍵}/ (5 2) (7 6 4)
35
It does the exactly same thing with custom non-lambda functions
P ← {⍺×⍵}
∘.P/ (5 2) (7 6 4)
35
I have only little experience with APL (30 hours), but I think that all
functions are created equal (I hope so!), and the both products above should be
same. (If it's a valid behaviour, -- a feature, not a bug -- I'd be grateful if
you could explain it to me.)
[ If I envelope the whole product in a lambda, it works again:
{⍺ ∘.{⍺×⍵} ⍵}/ (5 2) (7 6 4)
35 30 20
14 12 8
]
Now for the sure bug: the expression (for two bit vectors K and L -- it
doesn't seem to depend on their contents or shapes)
K { { ⍺ ∘.{| ⍺ - ⍵ + 0J1} ⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} L
was supposed to get the positions of 1s in both vectors ( {⍵/⍳⍴⍵}¨⍺ ⍵ ,
and do an outer product of these position lists using a function "
sqrt(difference^2 + 1) ". However, it says
copying: '0' at Executable.cc:627
tidx: '2' at Executable.cc:628
----------------------------------------
-- Stack trace at Executable.cc:629
----------------------------------------
0x7f8af60cfb45 __libc_start_main
0x43b425 main
0x53909d Workspace::immediate_execution(bool)
0x474365 Command::process_line()
0x46e1d0 Command::do_APL_expression(UCS_string&)
0x4811c4 StatementList::fix(UCS_string const&, char const*)
0x480030 Executable::setup_lambdas()
0x5290af UserFunction::UserFunction(Fun_signature, UCS_string
const&, UCS_string const&, Token_string const&)
0x480030 Executable::setup_lambdas()
0x5290af UserFunction::UserFunction(Fun_signature, UCS_string
const&, UCS_string const&, Token_string const&)
0x47fffe Executable::setup_lambdas()
0x47ec2f Executable::extract_lambda_text(Fun_signature, int)
const
========================================
and exits (with state of 0). I think it shouldn't do that.
[ But if I omit the {⍵/⍳⍴⍵}¨⍺ ⍵ and give some vector literals instead,
it works as intended:
{⍺∘.{|⍺-⍵+0J1}⍵}/ (5 2) (7 6 4)
2.236067977 1.414213562 1.414213562
5.099019514 4.123105626 2.236067977
]
Optime vale,
D.
P. S.: This behaviour is exhibited by the Debian package (apl_1.4-1_amd64.deb)
as well as by the source in Svn repository.
P. P. S.: I switched on all 41 logging facilites and ran it again. The
resulting log should be attached.
0 input files:
UCS_string::UCS_string(): utf = )OFF
UCS_string::UCS_string(): ucs = )OFF
UCS_string::UCS_string(): utf = ]LOG
UCS_string::UCS_string(): ucs = ]LOG
UCS_string::UCS_string(): utf = )OFF
UCS_string::UCS_string(): ucs = )OFF
UCS_string::UCS_string(): utf = ]LOG
UCS_string::UCS_string(): ucs = ]LOG
UCS_string::UCS_string(): utf = ]LOG 1 ON
UCS_string::UCS_string(): ucs = ]LOG 1 ON
UCS_string::UCS_string(): utf = ]LOG ⍳42 ON
UCS_string::UCS_string(): ucs = ]LOG ⍳42 ON
UCS_string::UCS_string(): utf = ]LOG
UCS_string::UCS_string(): ucs = ]LOG
UCS_string::UCS_string(): utf = ]LOG 2 3 ON
UCS_string::UCS_string(): ucs = ]LOG 2 3 ON
UCS_string::UCS_string(): utf = ]LOG ⍳41,ON
UCS_string::UCS_string(): ucs = ]LOG ⍳41,ON
UCS_string::UCS_string(): utf = ⍳41
UCS_string::UCS_string(): ucs = ⍳41
UCS_string::UCS_string(): utf = ]LOG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 ON
UCS_string::UCS_string(): ucs = ]LOG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 ON
UCS_string::UCS_string(): utf = ]LOG
UCS_string::UCS_string(): ucs = ]LOG
UCS_string::UCS_string(): utf = ]LOG (1 2 3 4) ON
UCS_string::UCS_string(): ucs = ]LOG (1 2 3 4) ON
UCS_string::UCS_string(): utf = ]LOG 2 ON
UCS_string::UCS_string(): ucs = ]LOG 2 ON
UCS_string::UCS_string(): utf = )OFF
UCS_string::UCS_string(): ucs = )OFF
UCS_string::UCS_string(): utf = )OFF
UCS_string::UCS_string(): ucs = )OFF
UCS_string::UCS_string(): utf = )OFF
UCS_string::UCS_string(): ucs = )OFF
Binding thread #0 to core 0
thread_contexts_count: 1
busy_worker_count: 0
active_core_count: 1
thread # 0: 0x7fade3b19740 pool sema: 0 RUN job: 0 no-name
Parallel::set_core_count(): keeping current core count of 1
thread_contexts_count: 1
busy_worker_count: 0
active_core_count: 1
thread # 0: 0x7fade3b19740 pool sema: 0 RUN job: 0 no-name
argc: 84
argv[0]: './apl'
argv[1]: '--noColor'
argv[2]: '-l'
argv[3]: '1'
argv[4]: '-l'
argv[5]: '2'
argv[6]: '-l'
argv[7]: '3'
argv[8]: '-l'
argv[9]: '4'
argv[10]: '-l'
argv[11]: '5'
argv[12]: '-l'
argv[13]: '6'
argv[14]: '-l'
argv[15]: '7'
argv[16]: '-l'
argv[17]: '8'
argv[18]: '-l'
argv[19]: '9'
argv[20]: '-l'
argv[21]: '10'
argv[22]: '-l'
argv[23]: '11'
argv[24]: '-l'
argv[25]: '12'
argv[26]: '-l'
argv[27]: '13'
argv[28]: '-l'
argv[29]: '14'
argv[30]: '-l'
argv[31]: '15'
argv[32]: '-l'
argv[33]: '16'
argv[34]: '-l'
argv[35]: '17'
argv[36]: '-l'
argv[37]: '18'
argv[38]: '-l'
argv[39]: '19'
argv[40]: '-l'
argv[41]: '20'
argv[42]: '-l'
argv[43]: '21'
argv[44]: '-l'
argv[45]: '22'
argv[46]: '-l'
argv[47]: '23'
argv[48]: '-l'
argv[49]: '24'
argv[50]: '-l'
argv[51]: '25'
argv[52]: '-l'
argv[53]: '26'
argv[54]: '-l'
argv[55]: '27'
argv[56]: '-l'
argv[57]: '28'
argv[58]: '-l'
argv[59]: '29'
argv[60]: '-l'
argv[61]: '30'
argv[62]: '-l'
argv[63]: '31'
argv[64]: '-l'
argv[65]: '32'
argv[66]: '-l'
argv[67]: '33'
argv[68]: '-l'
argv[69]: '34'
argv[70]: '-l'
argv[71]: '35'
argv[72]: '-l'
argv[73]: '36'
argv[74]: '-l'
argv[75]: '37'
argv[76]: '-l'
argv[77]: '38'
argv[78]: '-l'
argv[79]: '39'
argv[80]: '-l'
argv[81]: '40'
argv[82]: '-l'
argv[83]: '41'
UTF8_string::UTF8_string(ucs = CONTINUE)
UTF8_string::UTF8_string(): utf = CONTINUE
Quad_QUOTE::done(1) called from LineInput.cc:712 , buffer = []
'1 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0'
fix pmode=statement list:
1 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
addr 0x14a8bb0
------------------- StatementList::fix() --
[0]1 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize: input[44] is: «1 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0»
tokenize(44 chars) sees [tag TOK_NUMERIC «1»] 1 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵} ...
tokenize_number(1 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(43 chars) sees [tag TOK_SPACE « »] 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ ...
tokenize(42 chars) sees [tag TOK_NUMERIC «1»] 1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ ...
tokenize_number(1 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(41 chars) sees [tag TOK_SPACE « »] 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ { ...
tokenize(40 chars) sees [tag TOK_NUMERIC «0»] 0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵ ...
tokenize_number(0 { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(39 chars) sees [tag TOK_SPACE « »] { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/ ...
tokenize(38 chars) sees [tag TOK_L_CURLY «{»] { {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳ ...
tokenize(37 chars) sees [tag TOK_SPACE « »] {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴ ...
tokenize(36 chars) sees [tag TOK_L_CURLY «{»] {⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵ ...
tokenize(35 chars) sees [tag TOK_SYMBOL «⍺»] ⍺∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵} ...
tokenize(34 chars) sees [tag TOK_JOT «∘»] ∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨ ...
tokenize_function(∘.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(33 chars) sees [tag TOK_OPER2_INNER «.»] .{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ...
tokenize_function(.{|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(32 chars) sees [tag TOK_L_CURLY «{»] {|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ...
tokenize(31 chars) sees [tag TOK_F12_STILE «|»] |⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵ ...
tokenize_function(|⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(30 chars) sees [tag TOK_SYMBOL «⍺»] ⍺-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} ...
tokenize(29 chars) sees [tag TOK_F12_MINUS «-»] -⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} ...
tokenize_function(-⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(28 chars) sees [tag TOK_SYMBOL «⍵»] ⍵+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 ...
tokenize(27 chars) sees [tag TOK_F12_PLUS «+»] +0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 ...
tokenize_function(+0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(26 chars) sees [tag TOK_NUMERIC «0»] 0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 ...
tokenize_number(0J1}⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(23 chars) sees [tag TOK_R_CURLY «}»] }⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize(22 chars) sees [tag TOK_SYMBOL «⍵»] ⍵}/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize(21 chars) sees [tag TOK_R_CURLY «}»] }/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize(20 chars) sees [tag TOK_OPER1_REDUCE «/»] / {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize_function(/ {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(19 chars) sees [tag TOK_SPACE « »] {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize(18 chars) sees [tag TOK_L_CURLY «{»] {⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize(17 chars) sees [tag TOK_SYMBOL «⍵»] ⍵/⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize(16 chars) sees [tag TOK_OPER1_REDUCE «/»] /⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize_function(/⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(15 chars) sees [tag TOK_F12_INDEX_OF «⍳»] ⍳⍴⍵}¨⍺ ⍵} 0 1 0
tokenize_function(⍳⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(14 chars) sees [tag TOK_F12_RHO «⍴»] ⍴⍵}¨⍺ ⍵} 0 1 0
tokenize_function(⍴⍵}¨⍺ ⍵} 0 1 0)
tokenize(13 chars) sees [tag TOK_SYMBOL «⍵»] ⍵}¨⍺ ⍵} 0 1 0
tokenize(12 chars) sees [tag TOK_R_CURLY «}»] }¨⍺ ⍵} 0 1 0
tokenize(11 chars) sees [tag TOK_OPER1_EACH «¨»] ¨⍺ ⍵} 0 1 0
tokenize_function(¨⍺ ⍵} 0 1 0)
tokenize(10 chars) sees [tag TOK_SYMBOL «⍺»] ⍺ ⍵} 0 1 0
tokenize(9 chars) sees [tag TOK_SPACE « »] ⍵} 0 1 0
tokenize(8 chars) sees [tag TOK_SYMBOL «⍵»] ⍵} 0 1 0
tokenize(7 chars) sees [tag TOK_R_CURLY «}»] } 0 1 0
tokenize(6 chars) sees [tag TOK_SPACE « »] 0 1 0
tokenize(5 chars) sees [tag TOK_NUMERIC «0»] 0 1 0
tokenize_number(0 1 0)
tokenize(4 chars) sees [tag TOK_SPACE « »] 1 0
tokenize(3 chars) sees [tag TOK_NUMERIC «1»] 1 0
tokenize_number(1 0)
tokenize(2 chars) sees [tag TOK_SPACE « »] 0
tokenize(1 chars) sees [tag TOK_NUMERIC «0»] 0
tokenize_number(0)
tokenize() done (no error)
parse 1 [33]: `INTEGER `INTEGER `INTEGER `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `-
`⍵ `+ `COMPLEX `} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `}
`INTEGER `INTEGER `INTEGER
parse 2 [33]: `INTEGER `INTEGER `INTEGER `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `-
`⍵ `+ `COMPLEX `} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `}
`INTEGER `INTEGER `INTEGER
collect_groups [33 token] in: `INTEGER `INTEGER `INTEGER `{ `{ `⍺ `∘ `∘.
`{ `∣ `⍺ `- `⍵ `+ `COMPLEX `} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `}
`¨ `⍺ `⍵ `} `INTEGER `INTEGER `INTEGER
parse 3 [33]: `INTEGER `INTEGER `INTEGER `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `-
`⍵ `+ `COMPLEX `} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `}
`INTEGER `INTEGER `INTEGER
collect_constants [33 token] in: `INTEGER `INTEGER `INTEGER `{ `{ `⍺ `∘
`∘. `{ `∣ `⍺ `- `⍵ `+ `COMPLEX `} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵
`} `¨ `⍺ `⍵ `} `INTEGER `INTEGER `INTEGER
create_value(600) tos[33] pos 0 count 3 in:`INTEGER `INTEGER `INTEGER `{
`{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `COMPLEX `} `⍵ `} `/ `{ `⍵ `/
`⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `INTEGER `INTEGER `INTEGER
new 0x14a13b0 at Value.icc:67
create_value [33 token] out: `VALUE3«≡⊏3⊐before align_dot(), COL_INFO = 1:0:1,
this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `COMPLEX `}
`⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `INTEGER `INTEGER
`INTEGER
create_value(610) tos[33] pos 0 count 3 out:`VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `COMPLEX `}
`⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `INTEGER `INTEGER
`INTEGER
create_value(600) tos[33] pos 14 count 1 in:`VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `COMPLEX `}
`⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `INTEGER `INTEGER
`INTEGER
new 0x14aa9f0 at Value.icc:53
create_value(610) tos[33] pos 14 count 1 out:`VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1»
`} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `INTEGER `INTEGER
`INTEGER
create_value(600) tos[33] pos 30 count 3 in:`VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1»
`} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `INTEGER `INTEGER
`INTEGER
new 0x14aae10 at Value.icc:67
create_value [33 token] out: `VALUE3«≡⊏3⊐before align_dot(), COL_INFO = 1:0:1,
this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1»
`} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `VALUE3«≡⊏3⊐before
align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0» `VOID `VOID
create_value(610) tos[33] pos 30 count 3 out:`VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1»
`} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `VALUE3«≡⊏3⊐before
align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0» `VOID `VOID
collect_constants [33 token] out: `VALUE3«≡⊏3⊐before align_dot(), COL_INFO =
1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `VOID `VOID `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1»
`} `⍵ `} `/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `VALUE3«≡⊏3⊐before
align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0» `VOID `VOID
parse 4 [29]: `VALUE3«≡⊏3⊐before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1» `} `⍵ `}
`/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0»
parse 5 [29]: `VALUE3«≡⊏3⊐before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1» `} `⍵ `}
`/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0»
parse 6 [29]: `VALUE3«≡⊏3⊐before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `{ `{ `⍺ `∘ `∘. `{ `∣ `⍺ `- `⍵ `+ `VALUE3«0J1» `} `⍵ `}
`/ `{ `⍵ `/ `⍳ `⍴ `⍵ `} `¨ `⍺ `⍵ `} `VALUE3«≡⊏3⊐before align_dot(),
COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0»
[non-reverse 0] `VALUE3«≡⊏3⊐before align_dot(), COL_INFO = 1:0:1, this col =
1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
0 1 0» `} `⍵ `⍺ `¨ `} `⍵ `⍴ `⍳ `/ `⍵ `{ `/ `} `⍵ `}
`VALUE3«0J1» `+ `⍵ `- `⍺ `∣ `{ `∘. `∘ `⍺ `{ `{ `VALUE3«≡⊏3⊐before
align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│1│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
before align_dot(), COL_INFO = 1:0:1, this col = 1:0:1
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
after align_dot()
┌─┐
│0│
└─┘ flags=0x10 ilen=1 flen=0 rlen=1
1 1 0» `ENDL
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
UCS_string::UCS_string(): utf = ⍺
UCS_string::UCS_string(): ucs = ⍺
UCS_string::UCS_string(): utf = ⍵
UCS_string::UCS_string(): ucs = ⍵
UTF8_string::UTF8_string(ucs = λ)
UTF8_string::UTF8_string(): utf = λ
[non-reverse 0] `⍵ `⍺ `¨ `} `⍵ `⍴ `⍳ `/ `⍵ `{ `/ `} `⍵ `}
`VALUE3«0J1» `+ `⍵ `- `⍺ `∣ `{ `∘. `∘ `⍺ `{ `← `λ `ENDL
`RETURN_SYMBOL `ENDL
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
UCS_string::UCS_string(): utf = ⍵
UCS_string::UCS_string(): ucs = ⍵
UTF8_string::UTF8_string(ucs = λ)
UTF8_string::UTF8_string(): utf = λ
[non-reverse 0] `⍵ `⍴ `⍳ `/ `⍵ `← `λ `ENDL `RETURN_SYMBOL `ENDL
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
UCS_string::UCS_string(): utf = ⍺
UCS_string::UCS_string(): ucs = ⍺
UCS_string::UCS_string(): utf = ⍵
UCS_string::UCS_string(): ucs = ⍵
UTF8_string::UTF8_string(ucs = λ)
UTF8_string::UTF8_string(): utf = λ
[non-reverse 0] `⍵ `} `VALUE3«0J1» `+ `⍵ `- `⍺ `∣ `{ `∘. `∘ `⍺ `←
`λ `ENDL `RETURN_SYMBOL `ENDL
UCS_string::UCS_string(): utf = λ←
UCS_string::UCS_string(): ucs = λ←
copying: '0' at Executable.cc:669
tidx: '2' at Executable.cc:669
----------------------------------------
-- Stack trace at Executable.cc:669
----------------------------------------
0x7fade22f4b45 __libc_start_main
0x43eea5 main
0x57ac35 Workspace::immediate_execution(bool)
0x48e45a Command::process_line()
0x48e4dc Command::do_APL_expression(UCS_string&)
0x49ef29 StatementList::fix(UCS_string const&, char const*)
0x49e4d7 Executable::setup_lambdas()
0x49d7a2 Executable::setup_one_lambda(long)
0x56675d UserFunction::UserFunction(Fun_signature, UCS_string const&,
UCS_string const&, Token_string const&)
0x49e4d7 Executable::setup_lambdas()
0x49d7a2 Executable::setup_one_lambda(long)
0x56675d UserFunction::UserFunction(Fun_signature, UCS_string
const&, UCS_string const&, Token_string const&)
0x49e4d7 Executable::setup_lambdas()
0x49d76d Executable::setup_one_lambda(long)
0x49ba16 Executable::extract_lambda_text(Fun_signature) const
========================================