A definition of F02 that eliminates all of my other boiler plate or potential 
sources of error is

 F02 =: 2 : '(u`)(`v)(`:6)'  NB. still produces same reported errors

+ -: F02 +:

-: + +:

+ {{-: u +:}}

-: + +:

+ -: F02 +: 3

7.5

activating debug does not interupt the " noun result was required" error

full error is

|noun result was required
| fwd+rev


which (fwd+rev) is expression that appears only in if. clause near top of 
function.



On Thursday, December 8, 2022 at 07:37:32 p.m. EST, Henry Rich 
<henryhr...@gmail.com> wrote: 





The noun result message comes from the execution of the Fold_j_ verb, 
which does the processing.  It means that somehow, in executing your u/v 
arguments, the result was not a noun.

I don't understand your way of coding and don't want to.  If you can 
give a simple example of something that is creating a wrong result, I'll 
fix it.  I think you are right that there is a JE error, because it 
shouldn't be possible to get a non-noun result from executing a verb.

The script that runs F. is ~addons/dev/fold/foldr.ijs.  You can add 
debug statements to that script to type out values so you can see what 
failed.  I would do this myself if your code were less baroque.

Henry Rich

On 12/8/2022 7:24 PM, 'Pascal Jasmin' via Programming wrote:
> Not 100% sure it is bug in `:6 or the interaction with F..
>
> ex
>
> mjqjpqmgbljsphdztnvjfqwrcgsmlb
>
>   ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) (] F..) {{(4;~4{.]) 
>u (4}.])}} ex  NB. desired result
>
> ┌────┬─┐
>
> │jpqm│7│
>
> └────┴─┘
>
> where {{(4;~4{.]) u (4}.])}} is a preprocessing adverb alternative to a fork, 
> that will make a fork from its binding.
>
> code dump:
>
> isNoun =: (0 = 4!:0 ::0:)@:<
> isgerund =: 0:`(0 -.@e. 3 : ('a =. y (5!:0)';'1')"0)@.(0 < L.) :: 0:
> ar =: 1 : '5!:1 <''u'''
> ari =: 1 : 'if. isNoun ''u'' do. if. (isgerund -.@+. '''' -: ]) m do. m ar 
> else. m end. else.u ar end.'
> ti =: ari ` ari NB. different from doubleadverb2.ijs: '' is passed to ` . 
> boxed non gerund is ar'd ie a:`u
> ti2 =: ar ` ar
> F0 =: 1 : 'u ti ti `: 6'
> v2c =: 1 : '[. u ].'
> F1 =: 1 : '(ti u) ti (''''ti) `:6'
> F2 =: 1 : 'ti ti u `: 6'
> F01 =: ((ti (2 : 'ti')))(`:6)
> F02 =: 2 : '(u`)(`v)(`:6)'
> F02 =: ( ([.(2 : 'ti')) (2 : 'ti' ].) ) (`:6)
> F12 =: (2 : 'ti' ti) `: 6
>
> The F02 conjunction returns an adverb and is identical in function to 
> {{(4;~4{.]) u (4}.])}} when it is used as  (4;~4{.]) F02 (4}.]) (ie. it binds 
> params 0 and 2 of a fork, and waits to bind param 1 as an adverb)
>
>    (4;~4{.]) ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) (] F..) 
>(4;~4{.]) F02 (4}.]) ex
>
> |noun result was required
>
> This seems like "too aggressive" invocation of "noun result expected" when 
> `:6 is involved.  Perhaps as interaction with explicit conjuncitons.
>
> when "normal" parameters are given to adverb, everything works as expected.  
> including with intervening adverbs.
>
> [ ]: (4;~4{.]) F02 (4}.]) ex
>
> ┌────┬─┐
>
> │mjqj│4│
>
> └────┴─┘
>
>
>
> The following displays are just the first line of multiline definition of 
> Fold F..
>
>    ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) (] F..) (4;~4{.]) 
>F02 (4}.])
>
> (4 ;~ 4 {. ]) ] (2 : 0) (((1 >:@({::) ]) ,&<~ [ ,~ _3 ({.) 0 {:: ])`(_2 Z: 
> 1:)@.(4 = 0 #@~.@({::) ])) 4 }. ] NB. first line leading multiline definition 
> (2 : 0 ) for F..
>
>
>
>     ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::])  (] F..) 
>{{(4;~4{.]) u (4}.])}}
> (4 ;~ 4 {. ]) ] (2 : 0) (((1 >:@({::) ]) ,&<~ [ ,~ _3 ({.) 0 {:: ])`(_2 Z: 
> 1:)@.(4 = 0 #@~.@({::) ])) 4 }. ]  NB. identical
>
> replacing the output of the F02 version for 2 : 0 with F.., is correct
>
>   ((4 ;~ 4 {. ]) ] F.. (((1 >:@({::) ]) ,&<~ [ ,~ _3 ({.) 0 {:: ])`(_2 Z: 
>1:)@.(4 = 0 #@~.@({::) ])) 4 }. ]) ex
>
> ┌────┬─┐
>
> │jpqm│7│
>
> └────┴─┘
>    
> all of the modifiers that use `:6 fail with the same error.  v2c (doesn't use 
> `:6, and is equivalent to F1) works.
>
> it doesn't appear to be a bug in "explicit conjunctions" (those that 
> reference x and y)
>
> - (+: 2 : 'x u@v y') -:@[ F02 (+:@])
>
> -:@[ +: (2 : (':'; 'x u@v y')) - +:@]
> :
>   2 - (+: 2 : 'x u@v y') -:@[ F02 (+:@]) 3
>
> _10  NB. 1 and 6 are result of v0 and v2.  1 +:@- 6 = _10
>
>
> One possible fix that would make everything cleaner is if (] F..) did not 
> expand to explicit definition.  It is not needed yet,as a primitive.
>
>
>
> On Thursday, December 8, 2022 at 02:34:58 p.m. EST, 'Pascal Jasmin' via 
> Programming <programm...@jsoftware.com> wrote:
>
>
>
>
>
> mistake in Z definition found,
>
> Zl =: ] [ _3 Z: [
>
> makes this work,
>
> ((4;~4{.]) ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) ((100 Zl 
> ]) F..) (4}.])) ex
>
> but still
>
> ((4;~4{.]) ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) ((100 Zl 
> ]) F.) (4}.])) ex
>
> |domain error
>
>
>
>
> On Thursday, December 8, 2022 at 02:15:39 p.m. EST, 'Pascal Jasmin' via 
> Programming <programm...@jsoftware.com> wrote:
>
>
>
>
>
> The short circuit you are trying to avoid is to skip the full partitioning 
> part
>
> 4 #@~.\4
>
> one approach is to separate into the simplest possible partition, then hope 
> that i. special code finds the short circuit.
>
> 4 + (1 i.~ 4 = #@~."1) 4 ]\ ex
>
> your power approach is completely reasonable.
>
> A fold approach is complicated by seeking the index rather than a "computed 
> result"
>
> There might be too much manipulated computation involved, but the general 
> approach would be:
>
> x parameter to fold is (a: ,< 0)  NB. initial y.
> if head cell of y is shorter than 4, then append x to last 3 chars. (better 
> to preprocess y such that x (to F.) has first 4 chars, and y omits first 4.)
> if head is length 4, then apply test  ((1 >:@{:: ] ) ,&<~ [,~ _3{.0{::])`(_2 
> Z: 1:)@.(4 = #@~. 0 {:: ])
>
> ((4;~4{.]) ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) (] F..) 
> (4}.])) ex
> ┌────┬─┐
> │jpqm│7│
> └────┴─┘
>    
> I don't understand why this fails:  (F. instead of F..)
>
> Z =: ] [ Z:
>
>
>     ((4;~4{.]) ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) ((100 
>Z~ _3:) F.) (4}.])) ex
>
> |domain error
>
> or
>
>   ((4;~4{.]) ((1>:@{::]),&<~[,~ _3{.0{::])`(_2 Z:1:)@.(4=0#@~.@{::]) (] F.) 
>(4}.])) ex
>
> |domain error
>
>
> also it is not documented whether F. or F: are forward or reverse.
>
> On Thursday, December 8, 2022 at 11:28:12 a.m. EST, 'Michael Day' via 
> Programming <programm...@jsoftware.com> wrote:
>
>
>
>
>
> Having remarked recently (re Advent of Code day 6):
>
>      Very easy today, in J at least,  and probably in APL & K/Q. (Though it
>      suggests one should learn the new fold features,  as it's inefficient to
>      examine all the data for something that might occur early.  No problem
>      with 4kb,  but ....)
>
> I've just had a look at the Jwiki entries about Fold,  and wonder how it
> would work
> for day 6.
>
> The problem is so easy for J-ers that I don't think this will spoil it
> for forum users:
>     ex
> mjqjpqmgbljsphdztnvjfqwrcgsmlb
>     4 + 4 i.~ 4 #@~.\ ex
> 7
>
> QED
>
>     #data   NB. the size of my data set
> 4096
>     ts'4 + 4 i.~ 4 #@~.\ data'   NB.  time & space
> 0.0008555 67232
>
> I didn't bother making a function for this!
>
> One way to stop early,  rather than process the whole array, is this:
>     ts'4 + (# - #@:((}.`])@.(4&([ = #@:~.@:{.))^:_)) data'
> 0.0007299 4736
>
> (I know it's ugly,  and non-optimal!)
>
> Similar time but with ca 14x space-saving.
>
> But there must be some sort of Fold to progressively examine 4-windows,
> or 14-windows in part 2,  until the first appropriate window is found,
> when
> it stops.   That should save time as well as space.  Not necessary
> here,  of
> course,  but if there was a real application with many megabytes of data...
>
> Cheers,
>
> Mike
>
>
>
> On 06/12/2022 19:46, Brian Schott wrote:
>> I have successfully solved Day 5 using the following looping verb `tomove`
>> but cannot craft a Fold version, and would like help.
>>
>> *[FYI I have included an attachment that seems to load and execute
>> properly, but I could NOT get the email versions to load correctly,
>> presumably because of some funny characters.]*
>>
>> tomove=: dyad define
>> while. #y do.
>> x=.x move {. y
>> y =. }.y
>> end.
>> x
>> )
>>
>>
>> NB. The verb `move` for part 1 is very simple:
>>
>> move =: dyad define
>> 'n f t'=. _1 1 1*y - 0 1 1
>> take =. |.n{.>f{x
>> left =. <n}.>f{x
>> put =. <take,~>t{x
>> (left,put) (f,t)}x
>> )
>>
>> NB. the inputs are produced as follows.
>>
>> top =: 0 :0
>>        [D]
>> [N] [C]
>> [Z] [M] [P]
>>    1  2  3
>> )
>>
>> state=.deb each ;/ |:|.}:1 5 9&{;._2 top
>>
>> bottom =: 0 :0
>> move 1 from 2 to 1
>> move 3 from 1 to 3
>> move 2 from 2 to 1
>> move 1 from 1 to 2
>> )
>> alpha =. a. {~97+i.26
>> moves =. ".-.&alpha ;._2 bottom
>>
>> NB. finally the result is produced by the next phrase
>>
>> {:every state tomove moves
>>
>>
>> ----------------------------------------------------------------------
>> For information about J forums seehttp://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to