bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Niladic functions vs niladic lambdas


From: Dr . Jürgen Sauermann
Subject: Re: Niladic functions vs niladic lambdas
Date: Thu, 8 Jun 2023 19:44:03 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0

Hi Emmanuel,

first of all, lambdas are a bad construct which causes quite
a number of syntactic inconsistencies. Simply speaking,
the concept has not been thought out well.

1. A defined function created with ∇ or ⎕FX is unambiguously
 that: a defined function. For that reason I sometimes call
them "proper functions"  (as opposed to lambdas which are
anything but proper).

2. The stone-old fundamental APL evaluation rule reads (quote
from the IBM APL2 Language Reference Manual, page 20):

EVALUATION OF EXPRESSIONS

All functions execute according to their position within an _expression_. The rightmost
function whose arguments are available is evaluated first.

3. Now look at, for a simple example:

      Lambda ← { ⎕TS }

According 2. above (and noting all functions, which certainly includes the
special case of niladic functions), the niladic { ⎕TS } is the rightmost
function whose arguments (i.e. none since the { ... } is niladic) has to be
computed first.As of this writing, the result is, say,

      { ⎕TS }
2023 6 8 19 25 43 139

and what remains is:

      Lambda ← 2023 6 8 19 25 43 139

4. IOW: what looks at the first glance like the definition of a niladic function
named Lambda is actually the assignment of  a 7-item vector to variable
 Lambda.

5. Even more interesting, the inventor of the {...} notation (as far as i know)
says (on tryapl.org) the following:

      Lambda ← { ⎕TS }

      )FNS
Lambda

      Lambda     ⍝ expecting e.g. 
2023 6 8 19 25 43 139
{⎕TS} 

which makes, IMHO, even less sense.

Hope this explains it,

Jürgen


On 6/8/23 17:37, Emmanuel Charpentier wrote:

Dear list,

It seems that niladic lambdas are treated like constants.

Rough and naïve illustration : pasting this :

⍝ What about niladic functions and lambdas ?
⍝ Example of a numeric timestamp generator
⍝ Simplifying assumptions : we want to measure about a few minutes
⍝ and not around midnight...
⍝ Start afresh
)clear
⍝ Function
∇ R ← NTS
  R ← 24 60 60 1000 ⊥ ¯4↑⎕TS
∇
⍝ Try it
T1 ← NTS
⍝ Wait a few seconds
)host sleep 2
T2 ← NTS
⍞←'Spent Time : ',⍕(T2-T1)÷1000
⍝ Lambda
nts ← {24 60 60 1000 ⊥ ¯4↑⎕TS}
⍝ Try it
t1 ← nts
⍝ Wait a few seconds
)host sleep 2
t2 ← nts
⍞←'Spent time : ',⍕(t2-t1)÷1000

in a gnu-apl buffer gives :

      CLEAR WS

0 
Spent Time : 2.002
0 
Spent time : 0

Why ?

Bonus question : what causes the impression of the 0s ?

Sincerely,

-- Emmanuel Charpentier



reply via email to

[Prev in Thread] Current Thread [Next in Thread]