|
From: | Christian Robert |
Subject: | Re: [Bug-apl] A couple of bugs, and a question on the power operator |
Date: | Mon, 15 Aug 2016 22:10:00 -0400 |
User-agent: | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 |
Look at this {1+÷⍵}⍣= 256 1.618033989 {1+÷⍵}⍣{⍺=⍵} 256 1.618033989 {1+÷⍵}⍣{⍺=⍵⊣⎕←⍺ ⍵ (⍵-⍺)} 256 1.00390625 256 254.9960938 1.996108949 1.00390625 ¯0.9922026994 1.500974659 1.996108949 0.4951342905 1.666233766 1.500974659 ¯0.1652591074 1.600155885 1.666233766 0.06607788159 1.624939113 1.600155885 ¯0.02478322885 1.615407674 1.624939113 0.009531439632 1.619038783 1.615407674 ¯0.003631108845 1.61765043 1.619038783 0.001388352906 1.61818053 1.61765043 ¯0.0005301001708 1.61797802 1.61818053 0.0002025099168 1.618055368 1.61797802 ¯0.00007734757573 1.618025823 1.618055368 0.00002954477659 1.618037108 1.618025823 ¯0.00001128500832 1.618032797 1.618037108 0.000004310503058 1.618034444 1.618032797 ¯0.000001646463698 1.618033815 1.618034444 6.288934578E¯7 1.618034055 1.618033815 ¯2.402158839E¯7 1.618033963 1.618034055 9.175430926E¯8 1.618033998 1.618033963 ¯3.504702684E¯8 1.618033985 1.618033998 1.338677325E¯8 1.61803399 1.618033985 ¯5.113292456E¯9 1.618033988 1.61803399 1.953103901E¯9 1.618033989 1.618033988 ¯7.460192464E¯10 1.618033989 1.618033989 2.849540603E¯10 1.618033989 1.618033989 ¯1.088429347E¯10 1.618033989 1.618033989 4.157429956E¯11 1.618033989 1.618033989 ¯1.587974197E¯11 1.618033989 1.618033989 6.065370428E¯12 1.618033989 1.618033989 ¯2.316813408E¯12 1.618033989 1.618033989 8.850697952E¯13 1.618033989 1.618033989 ¯3.379518887E¯13 1.618033989 1.618033989 1.290079155E¯13 1.618033989 power is always diadic on the function it call. > Its right argument then is _always_ the result of the previous iteration. Is that correct? I really hope so. That was my understanding since several months. I may still be wrong. Xtian. On 2016-08-15 21:54, Louis de Forcrand wrote:
I'm sorry, _I_ misunderstood the manual. I did not know that Dyalog dfns were always dyadic / ambivalent. If I understand correctly then, in F {pow} G, G's left argument is _always_ the result of the power operator if G is true. Its right argument then is _always_ the result of the previous iteration. Is that correct? If it is, I believe always ambivalent lambdas would be convenient (aside from possible implementation problems), but not at all essential; it's probably rare to check something about the previous iteration without comparing it to the current one. But wouldn't have been simpler to model them as ambivalent from the ground up? Louis On 15 Aug 2016, at 08:22, Jay Foad <address@hidden <mailto:address@hidden>> wrote:The manual is here, see page 145: http://docs.dyalog.com/15.0/Dyalog%20APL%20Language%20Reference%20Guide.pdf I'm not sure where Louis got the information about monadic G. I assure you that Dyalog APL does not examine G to see if it's monadic or dyadic. It always tries to apply G dyadically. Jay. On 15 August 2016 at 12:30, Juergen Sauermann <address@hidden <mailto:address@hidden>> wrote: Hi Jay, I see. Maybe I misunderstood Louis,s email from last Saturday completely? The way I read this email was that in Dyalog APL version 15 you can have a monadic condition function G in F⍣G . Quote from the email: ///The Dyalog 15.0 manual states that the power operator can take a/ ///function right argument. In this case, that function can be/ ///either monadic or dyadic, and can be a lambda./ ///If it’s monadic:/ / / /// (F⍣G) ⍵ ←→ ⍵ ← F ⍵ until G ⍵/ ///⍺ (F⍣G) ⍵ ←→ ⍵ ← ⍺ F ⍵ until G ⍵/ / / ///If it’s dyadic:/ / / /// (F⍣G) ⍵ ←→ ⍵ ← F ⍵ until ( F ⍵) G ⍵/ ///⍺ (F⍣G) ⍵ ←→ ⍵ ← ⍺ F ⍵ until (⍺ F ⍵) G ⍵/ / / ///(Note that G is checked before the first time F is executed.)/ I don't know if that statement is correct or not, but if it is then I would prefer to not introduce this "monadic case" in GNU APL for the reasons explained earlier. Thanks, Jürgen On 08/15/2016 10:16 AM, Jay Foad wrote:On 13 August 2016 at 13:05, Juergen Sauermann <address@hidden <mailto:address@hidden>> wrote: In "Mastering Dyalog APL" I haven't found the monadic case for the right function argument G of the power operator. In that book G seems to be always dyadic. So the monadic case looks like a new Dyalog invention. And, if it is defined like you say, IMHO not the ultimate wisdom. There is no "monadic case". G is always applied dyadically, and if it happens to be a strictly monadic function then you'll get a SYNTAX ERROR: ⎕FX'r←g y' 'r←g>10' ⍝ g is strictly monadic 2 g 4 ⍝ applying it dyadically gives an error SYNTAX ERROR (+⍨⍣g)1 ⍝ power operator tries to apply g dyadically SYNTAX ERROR In general, Dyalog APL /never/ examines a function operand to see whether it is monadic or dyadic, in order to treat them differently. Jay.
[Prev in Thread] | Current Thread | [Next in Thread] |