sorry for missing definitions

daFx =: (0 : ) 1 : ('a =. (''2 : ('', (lr m) , '') u'') label_. 1 : (''u  1 :'' 
, quote a)')

tieAD =: 'u tieA v' daF
tieADs =: 'v tieA u' daF



isgerund +`''
1
isgerund 3;5
0
isgerund 0 ; 'asdfd'
0

isgerund +/@]`+`-:
1



----- Original Message -----
From: Brian Schott <[email protected]>
To: Programming forum <[email protected]>
Sent: Saturday, July 30, 2016 9:37 AM
Subject: Re: [Jprogramming] multiadverb (double adverb) improvements

Just when I thought I was beginning to understand some of your code I began
having difficulty with your definition of aatrain or maybe its some other
definition into which aatrain is embedded. I think the problem may be that
daFx is not defined.

I also noticed tieAD seems undefined but am not sure.

My experiments to better understand isgerund (shown below) don't tell me
much. (By the way, I mixed into my experiments "quote" to see if I could
figure out its use better, too.)

    isgerund '+'
0
    isgerund +
isgerund +
    isgerund `+
┌────────┬─┐
│isgerund│+│
└────────┴─┘
   isgerund '`+'
0
   isgerund '` quote a'
0
   isgerund '` quote ''a'''
0



On Sat, Jul 30, 2016 at 4:05 AM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> Now uses ar's, and a simple definition language.
>
>
> first step is to come up with a good replacement for ` (tie).  Basically
> tie needs to always produce gerunds, appending any non gerunds to an
> existing gerund.  tieA is like tie but if one side is a string, it attempts
> to interpret it as a modifier, or unbound verb name.  It makes sense to
> have a separate function for special vs noun processing of strings.
> (multiline definitions have line break after them)
>
>
> eval_z_ =: 1 : ' a: 1 :  m'
> isNoun_z_ =: (0 = 4!:0 ( :: 0:))@:<
> ar =: 1 : '5!:1 <''u'''
> aar =: 1 : 'if. isNoun ''u'' do. q =. m eval else. q =. u end. 5!:1 <
> ''q'' '
>
> isgerund =: 0:`(0 -.@e. 3 : ('y (5!:0)';'1')"0)@.(0 < L.) :: 0:
> isgerundA =: 1 : ' if. isNoun ''u'' do. isgerund m else. 0 end.'
>
>
> tie =: 2 : 'if.  u isgerundA do. if. v isgerundA do. m ar , v ar else. m ,
> v ar end. else. if. v isgerundA do. u ar , n  else. u ar , v ar end. end. '
>
>
> tieA =: 2 : 'if.  u isgerundA do. if. v isgerundA do. m ar , v ar else. m
> , v aar end. else. if. v isgerundA do. u aar , n  else. u aar , v aar end.
> end. '
>
>
> '/\' tieA + tieA'/' tieA '\' tie (+@-) tieA 'asdfasdf'
> ┌─────────┬─┬─┬─┬─────────┬────────┐
> │┌─┬─────┐│+│/│\│┌─┬─────┐│asdfasdf│
> ││4│┌─┬─┐││ │ │ ││@│┌─┬─┐││        │
> ││ ││/│\│││ │ │ ││ ││+│-│││        │
> ││ │└─┴─┘││ │ │ ││ │└─┴─┘││        │
> │└─┴─────┘│ │ │ │└─┴─────┘│        │
> └─────────┴─┴─┴─┴─────────┴────────┘
>
> tie as double adverb also useful
>
> daF =: 1 : ('a =. (''2 : '', (quote m) , '' u'') label_. 1 : (''u  1 :'' ,
> quote a)')
>
> tieD =: 'u tie v' daF
> tieDs =: 'v tie u' daF
>
>
> The main advantage of double adverbs is composing them with other adverbs
> (conjunctions can't), and there are no unnecessary parentheses for the v
> side.
>
> -/\ +@- (3 + *) tieD tieD tieA '/\'
> ┌─────────────┬─────────┬───────────────┬─────────┐
> │┌─┬─────────┐│┌─┬─────┐│┌─┬───────────┐│┌─┬─────┐│
> ││\│┌───────┐│││@│┌─┬─┐│││3│┌─────┬─┬─┐│││4│┌─┬─┐││
> ││ ││┌─┬───┐││││ ││+│-││││ ││┌─┬─┐│+│*││││ ││/│\│││
> ││ │││/│┌─┐│││││ │└─┴─┘│││ │││0│3││ │ ││││ │└─┴─┘││
> ││ │││ ││-│││││└─┴─────┘││ ││└─┴─┘│ │ │││└─┴─────┘│
> ││ │││ │└─┘││││         ││ │└─────┴─┴─┘││         │
> ││ ││└─┴───┘│││         │└─┴───────────┘│         │
> ││ │└───────┘││         │               │         │
> │└─┴─────────┘│         │               │         │
> └─────────────┴─────────┴───────────────┴─────────┘
>
> Note that the code to create double adverbs looks identical to
> conjunctions.  To make longer multiadverbs just as easy, the main approach
> is to turn the multiadverb into a double adverb where the right param is a
> code string, and the left param, the gerund of all other parameters.
>
> A helper function U (capital) is available (silently inserted into adverb)
> to extract any gerund.  Its based on Ug below.  If only one index to U is
> provided then the gerund is unpacked (5!:0 turned into verb noun or
> modifier)
>
>
> Ug =: 2 : 'a =. (m { n) if. 1 =#a do. a 5!:0 end.'
> MA1 =: (1 : 0)
> '`ff' =. {: m
> f =. 1 : ('U =.  Ug m'; ff )
> (}: m) f
>
> )
> ncS =: 3 : 'z=.y 1 :y label_. 4!:0 <''z'' ' ::(_2:)
> lrA =: 1 : '5!:5 < ''u'''
> eval =: 1 : ' a: 1 :  m'
> ismodstring =: 1 : 'if. 0 = 4!:0 <''u'' do. try. q =.  m eval catch. 0
> return. end. 1 2 e.~ 4!:0 <''q''else. 0 end. '
> ncA =: 1 : 'if. 3 ~: 4!:0 < ''u'' do. if. m ismodstring do. m ; ncS m
> else. 0 ;~ ''('', m lrA ,'')'' end. else. 3;~ ''('', u lrA ,'')'' end.'
> aatrain =: 0 daFx
> if. 0 -.@-: 1{:: a =. v ncA do. n =. ,: a end.
> if.  1 = 1 {:: (;: inv {."1 a =.(u ncA , n)) ncA do.  a aatrain else.
> (;: inv {."1 a) eval end.
> )
>
> MA =: 'tieD MA1' aatrain
> MA3 =: 'tieD tieD' MA
>
> NB. fork definitions
> F =: '0 U 1 U 2 U' MA3
> F =: '(i.3) U `:6' MA3
> F =: 'm `:6' MA3
>
>
>
>
> aatrain is previous utility used to compose double adverbs into infinite
> trains.  used in defintion of MA (Multiadverb).  A feature of aatrain is
> that any adverb "anchored" by it can add adverbs and mutliadverbs by string
> as an extended adverb (MA3- 3 param multiadverb does this)
>
>   +/ % # F NB. parenthesless
> +/ % #
>   +/ (% +:@# F) NB. parens just to show contained adverb.
> +/ % +:@#
>
>  +: + +/ (% # '+:@:(2 U) 1 U~ 0 U'MA3) F
> +: + +:@:# %~ +/
>
> '@' -  +   % tieD tieD tieAD ('/'tieADs)  'm' MA NB. use ('m' MA) for easy
> debug
> ┌─┬─┬─┬─┬─┐
> │/│@│-│+│%│
> └─┴─┴─┴─┴─┘
>   '@' -  +   % tieD tieD tieAD '/'tieADs  '2 0 3 2 0 U `:6 ' MA
> -/ + -/
> modifier params can mess up things if they are not at the left end. tieDs
> and tieADs
>
>
> (('@' (-  (+   % tieD) tieD) tieAD) '/'tieADs)  'm' MA NB. operator
> groupings.
> ┌─┬─┬─┬─┬─┐
> │/│@│-│+│%│
> └─┴─┴─┴─┴─┘
>
> can make multiadverbs that work with arbitrary sized parameters, though
> best practice is to form the gerund "manually", and a guideline, modifiers
> are leftest parameter(s).
>
>
> '+ -:' 3 - +:@*/ tieD tieD tieAD '(0 (joinstring ;/) }. i.@# m) U `:6' MA
> 3 (+ -:) - (+ -:) +:@*/
>
> conjoin =: '(0 (joinstring ;/) }. i.@# m) U `:6' MA
>
> '@:' +:/ - +:@*/ tieD tieD tieAD conjoin
> +:/@:-@:(+:@*/)
>
> Can also write multiline versions
>
> test =: (cutLF 0 : 0)  MA3
> a =. 0 1 2 U
> a  `:6
> )
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm




-- 
(B=) <-----my sig
Brian Schott

----------------------------------------------------------------------
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