An improved version of filtermod. The conjunction uses v to select and u to
modify the selection.
itemamend =: (([: ;/(,.i.@#))@:[ { ])"1 _
filtermod =: 2 : 'v itemamend ] ,: v # inv [: u v # ]'
an adverb version just uses x as the modified replacement for the selection
filtermodA =: 1 : 'u itemamend ] ,: (#inv~ u)'
(3;4;0$0) (a: = ]) filtermodA a: ,~ a: ,~ a:, 1 ;2
┌─┬─┬─┬─┬┐
│3│1│2│4││
└─┴─┴─┴─┴┘
above replaces empty boxes in y, but leaves one empty.
currying in J is typically thought of as bond &, but that can only bond an
entire x or y. The above filling of boxes can let us build the input to
functions that parse multiple parameters from x or y.
A curry verb to start
curry =: 4 : '(boxopen y) (a: = ]) filtermodA x'
(( 3$ a: ) curry a:, 1;a:) curry 3;2
┌─┬─┬─┐
│3│1│2│
└─┴─┴─┘
(( 3$ a: ) curry a:, 1;a:) curry 3;a:
┌─┬─┬┐
│3│1││
└─┴─┴┘
There is 2 calls to curry each filling in parameters, and in the second
example, the result still includes missing parameters.
A curry conjunction is used to bind partially filled parameters to a verb,
which can be called with the missing parameters:
curryB=: 2 : 'u@:(n&curry)'
(3 :'l*w*h [''l w h'' =. y') curryB ((( 3$ a: ) curry a:, 1;a:) curry 3;a:)
3 : 'l*w*h [''l w h'' =. y'@:((3;1;0$0) (1 : '(boxopen y) (a: = ]) filtermodA
m'))
function on the left is volume that takes 3 parameters. The result of the
conjunction has bound 2 of the 3 parameters to 3;1
(3 :'l*w*h [''l w h'' =. y')curryB((( 3$ a: ) curry a:, 1;a:) curry 3;a:) 4
12
; curryB ((( 3$ a: ) curry a:, 1;a:) curry 3;a:) 4
3 1 4
parameters can be bound in arbitrary positions, and works with gerunds or other
code fragments, so is likely more flexible than other languages.
________________________________
From: Pascal Jasmin <[email protected]>
To: "[email protected]" <[email protected]>
Sent: Saturday, July 12, 2014 1:16:59 AM
Subject: Re: [Jprogramming] speaking of amend... filtermod a useful
conjunction
missing isNoun
isNoun =: (0 = 4!:0 ( :: 0:))@:<
----- Original Message -----
From: 'Pascal Jasmin' via Programming <[email protected]>
To: "[email protected]" <[email protected]>
Cc:
Sent: Saturday, July 12, 2014 12:16:24 AM
Subject: Re: [Jprogramming] speaking of amend... filtermod a useful
conjunction
before implementing Kip's version, here is a useful though hacky conjunction I
call filtermod.
The v side produces a filter (list of 1s and 0s), the u side takes as argument
the list selected by the filter and just needs to return the same number of
items. It may modify and even reorder the items. After u is done, the new
items in new order will be inserted back into the list at the filtered indexes.
filtermod =: 2 : 0 NB. v is filter func, u is func that modifies items. then
modified items replaced in original.
if. isNoun 'u' do. '`box mod' =. u else. '`box mod' =. ]`u end.
a =. v y
> a} box y,: a # inv mod a # y
:
if. isNoun 'u' do. '`box mod' =. u else. '`box mod' =. ]`u end.
a =. x v y
> a} box y,: a # inv x mod a # y
)
u can optionally be a gerund, though its a bit hacky, it may be more flexible
than Kip's solution. The typical gerund addition would be <"1, but it can be
any verb necessary to provide amend with a conforming shape.
for rows that total over 6, slide the tail element into the next pair:
<"1`({."1,. _1 |. {:"1) filtermod ((6 < +/"1)) i. 6 2
0 1
2 3
4 11
6 5
8 7
10 9
simpler ones:
2 (5&+) filtermod < i. 6
NB. ^: trick
0 1 2 13 14 15
2 (5 + ]) filtermod < i. 6 NB. add 5 to items greater than 2
0 1 2 8 9 10
2 (2|. 5 + ]) filtermod < i. 6 NB. and reordered.
0 1 2 10 8 9
----- Original Message -----
From: Kip Murray <[email protected]>
To: "[email protected]" <[email protected]>
Cc:
Sent: Friday, July 11, 2014 11:09:10 PM
Subject: Re: [Jprogramming] speaking of amend...
v =: (-. , ])@[ # ,/@]
0 1 1 v i. 2 3 2
0 1
8 9
10 11
On Friday, July 11, 2014, Linda Alvord <[email protected]> wrote:
> I made it too hard because I thought I had seen carriage returns.
>
> f=: 13 :'(x}i.2 3){((*/0 1{$y),2)$,y'
> f
> 4 : '(x}i.2 3){((*/0 1{$y),2)$,y'
> 0 1 1 f i.2 3 2
> 0 1
> 8 9
> 10 11
>
> Linda
>
> -----Original Message-----
> From: [email protected] <javascript:;>
> [mailto:[email protected] <javascript:;>] On
> Behalf Of Linda Alvord
> Sent: Friday, July 11, 2014 10:53 PM
> To: [email protected] <javascript:;>
> Subject: Re: [Jprogramming] speaking of amend...
>
> I'm sure I'll learn lots of better ways than this.
>
> f=: 13 :'3 1 2$,(x}i.2 3){((*/0 1{$y),2)$,y'
> f
> 4 : '3 1 2$,(x}i.2 3){((*/0 1{$y),2)$,y'
>
> 0 1 1 f i.2 3 2
> 0 1
>
> 8 9
>
> 10 11
>
> Linda
>
> -----Original Message-----
> From: [email protected] <javascript:;>
> [mailto:[email protected] <javascript:;>] On
> Behalf Of 'Pascal
> Jasmin' via Programming
> Sent: Friday, July 11, 2014 8:57 PM
> To: Programming forum
> Subject: [Jprogramming] speaking of amend...
>
> what verb v (or I guess adverb is ok) could I use to get
>
> 0 1 1 v i. 2 3 2
>
> 0 1
> 8 9
> 10 11
>
>
> i.2 3 2
> 0 1
> 2 3
> 4 5
> 6 7
> 8 9
> 10 11
> ----------------------------------------------------------------------
> 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
>
--
Sent from Gmail Mobile
----------------------------------------------------------------------
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