Thank you. Great news. I will test when beta comes out.
On Thursday, December 8, 2022 at 08:22:41 p.m. EST, Henry Rich <henryhr...@gmail.com> wrote: I realized that I could just run the verb without the y argument to get it back into normal order. Then when I ran it on my current system it ran to completion! The result was +----------+-+ |+----+-+++|4| ||jpqm|7|||| | |+----+-+++| | +----------+-+ The difference is probably that just this afternoon I realized that F. didn't behave well in 5!:n, and also produced an empty result when appearing in (u f.) . I fixed those bugs before running your test. So I went back to an older version and reproduced the error you saw. After adding typeout to the script I see that the y argument being passed in to Fold_j_ is not a noun. That produces chaos. I'm going to hope that the bugs I fixed today got rid of the problem. The fixes might or might not be in the next beta. Henry Rich On 12/8/2022 8:13 PM, 'Pascal Jasmin' via Programming wrote: > 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm