all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* cl-loop - do you understand it well?
@ 2022-12-10  2:22 Emanuel Berg
  2022-12-10 18:56 ` Michael Heerdegen
  0 siblings, 1 reply; 17+ messages in thread
From: Emanuel Berg @ 2022-12-10  2:22 UTC (permalink / raw)
  To: help-gnu-emacs

So what is this eval'd to - an why?

Hint: All and any method is allowed!

;;; -*- lexical-binding: t -*-

(require 'cl-lib)

(cl-loop
  for i from 0 to 1
  collect (lambda () i) into funs
  finally return (apply #'+ (mapcar #'funcall funs)) )

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-10  2:22 cl-loop - do you understand it well? Emanuel Berg
@ 2022-12-10 18:56 ` Michael Heerdegen
  2022-12-10 19:00   ` Akib Azmain Turja
  0 siblings, 1 reply; 17+ messages in thread
From: Michael Heerdegen @ 2022-12-10 18:56 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg <incal@dataswamp.org> writes:

> So what is this eval'd to - an why?

The answer to the question in the subject is easier: No!


> Hint: All and any method is allowed!
>
> ;;; -*- lexical-binding: t -*-
>
> (require 'cl-lib)
>
> (cl-loop
>   for i from 0 to 1
>   collect (lambda () i) into funs
>   finally return (apply #'+ (mapcar #'funcall funs)) )

Any method?  I would like to test it with Emacs 31.  Would it make a
difference?

Honestly: Do the cl-loop fans think we should change the behavior?


Michael.




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-10 18:56 ` Michael Heerdegen
@ 2022-12-10 19:00   ` Akib Azmain Turja
  2022-12-10 19:35     ` tomas
  0 siblings, 1 reply; 17+ messages in thread
From: Akib Azmain Turja @ 2022-12-10 19:00 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 966 bytes --]

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Emanuel Berg <incal@dataswamp.org> writes:
>
>> So what is this eval'd to - an why?
>
> The answer to the question in the subject is easier: No!
>
>
>> Hint: All and any method is allowed!
>>
>> ;;; -*- lexical-binding: t -*-
>>
>> (require 'cl-lib)
>>
>> (cl-loop
>>   for i from 0 to 1
>>   collect (lambda () i) into funs
>>   finally return (apply #'+ (mapcar #'funcall funs)) )

Somehow, the code doesn't make any sense to me.  What it's supposed to
achieve?

>
> Any method?  I would like to test it with Emacs 31.  Would it make a

Where did you get "Emacs 31"?  ;)

> difference?
>
> Honestly: Do the cl-loop fans think we should change the behavior?
>
>
> Michael.
>
>

-- 
Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5
Fediverse: akib@hostux.social
Codeberg: akib
emailselfdefense.fsf.org | "Nothing can be secure without encryption."

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-10 19:00   ` Akib Azmain Turja
@ 2022-12-10 19:35     ` tomas
  2022-12-10 20:48       ` Michael Heerdegen
  0 siblings, 1 reply; 17+ messages in thread
From: tomas @ 2022-12-10 19:35 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 358 bytes --]

On Sun, Dec 11, 2022 at 01:00:41AM +0600, Akib Azmain Turja wrote:
> Michael Heerdegen <michael_heerdegen@web.de> writes:

[...]

> > Any method?  I would like to test it with Emacs 31.  Would it make a
> 
> Where did you get "Emacs 31"?  ;)

Michael has an "Emacs Prime Time" subscription. They send packages from
the future :)

Cheers
-- 
t

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-10 19:35     ` tomas
@ 2022-12-10 20:48       ` Michael Heerdegen
  2022-12-11  5:57         ` Akib Azmain Turja
  0 siblings, 1 reply; 17+ messages in thread
From: Michael Heerdegen @ 2022-12-10 20:48 UTC (permalink / raw)
  To: help-gnu-emacs

<tomas@tuxteam.de> writes:

> > Where did you get "Emacs 31"?  ;)
>
> Michael has an "Emacs Prime Time" subscription. They send packages from
> the future :)

Jokes aside: No. I'm just using a gv-setter of `current-time'.  I want
to see if it has any side effects before I'm going to install that
patch.  Maybe it's in Emacs 31, didn't check.

BTW, the implementation was a lot harder than expected but it was worth
it AFAICT.

Michael.




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-10 20:48       ` Michael Heerdegen
@ 2022-12-11  5:57         ` Akib Azmain Turja
  2022-12-11 14:43           ` Stefan Monnier via Users list for the GNU Emacs text editor
  2022-12-12  1:41           ` Michael Heerdegen
  0 siblings, 2 replies; 17+ messages in thread
From: Akib Azmain Turja @ 2022-12-11  5:57 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 968 bytes --]

Michael Heerdegen <michael_heerdegen@web.de> writes:

> <tomas@tuxteam.de> writes:
>
>> > Where did you get "Emacs 31"?  ;)
>>
>> Michael has an "Emacs Prime Time" subscription. They send packages from
>> the future :)

:)  :)  :)

>
> Jokes aside: No. I'm just using a gv-setter of `current-time'.  I want

Is it something new?  How this will be useful?

> to see if it has any side effects before I'm going to install that
> patch.  Maybe it's in Emacs 31, didn't check.

Emacs 29 branch has been cut for release, so the master branch should
hold the upcoming Emacs 30, not Emacs 31.

Or do you plan to apply the patch on Emacs 31?

>
> BTW, the implementation was a lot harder than expected but it was worth
> it AFAICT.
>
> Michael.
>
>

-- 
Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5
Fediverse: akib@hostux.social
Codeberg: akib
emailselfdefense.fsf.org | "Nothing can be secure without encryption."

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-11  5:57         ` Akib Azmain Turja
@ 2022-12-11 14:43           ` Stefan Monnier via Users list for the GNU Emacs text editor
  2022-12-12  6:03             ` Akib Azmain Turja
  2022-12-12  1:41           ` Michael Heerdegen
  1 sibling, 1 reply; 17+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2022-12-11 14:43 UTC (permalink / raw)
  To: help-gnu-emacs

Akib Azmain Turja [2022-12-11 11:57:51] wrote:
> Michael Heerdegen <michael_heerdegen@web.de> writes:
>> <tomas@tuxteam.de> writes:
>>> > Where did you get "Emacs 31"?  ;)
>>> Michael has an "Emacs Prime Time" subscription. They send packages from
>>> the future :)
> :)  :)  :)
>> Jokes aside: No. I'm just using a gv-setter of `current-time'.  I want
> Is it something new?

"new" is relative.  It depends on what you have set (current-time).

> How this will be useful?

It will be useful for example to correct past mistakes.


        Stefan




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-11  5:57         ` Akib Azmain Turja
  2022-12-11 14:43           ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2022-12-12  1:41           ` Michael Heerdegen
  2022-12-14 23:53             ` Emanuel Berg
  1 sibling, 1 reply; 17+ messages in thread
From: Michael Heerdegen @ 2022-12-12  1:41 UTC (permalink / raw)
  To: help-gnu-emacs

Akib Azmain Turja <akib@disroot.org> writes:

> > Jokes aside: No. I'm just using a gv-setter of `current-time'.  I want
>
> Is it something new?  How this will be useful?

It would be very useful but no I don't have such a thing, it was a
joke.

Michael.




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-11 14:43           ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2022-12-12  6:03             ` Akib Azmain Turja
  0 siblings, 0 replies; 17+ messages in thread
From: Akib Azmain Turja @ 2022-12-12  6:03 UTC (permalink / raw)
  To: Stefan Monnier via Users list for the GNU Emacs text editor
  Cc: Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 2949 bytes --]

Just yet another spam.  ;b

Stefan Monnier via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:

[...]

>> Is it something new?
>
> "new" is relative.  It depends on what you have set (current-time).
>
>> How this will be useful?
>
> It will be useful for example to correct past mistakes.

Then I must quote etc/future-bug:

--8<---------------cut here---------------start------------->8---
Date: Tue, 23 Feb 2199 21:03:50 -0600
From: Karl Fogel <kfogel@floss.cyclic.com>
To: bug-gnu-emacs@prep.ai.mit.edu
Subject: M-x search-backward-in-time broken...
X-Windows: you'll envy the dead.

In GNU Emacs 51.70.4 (i9986-unknown-linux-gnu, X toolkit) of Sat Feb  20 2199 on floss
configured using `configure  --with-x-toolkit=yes'

        The `search-backward-in-time' function appears to be broken in
Emacs 51.70.

        Unfortunately, I can never seem to start the debugger early
enough to catch the error as it happens.  However I have traced the
problem through source by eye, and it looks like `time-forward' can't
handle negative arguments anymore.  This is consistent with other
symptoms: for example, `undo' (which since 51.25 has worked by passing
a negative arg to `time-forward') is also broken.  However, `do' still
works -- it seems that `time-forward' continues to handle positive
arguments just fine.

        No one here-and-now can figure out how to fix the problem,
because the code for `time-forward' is so hairy.  We're using M-x
report-future-emacs-bug to request that you folks include more
comments when you write it (sometime in 2198 as I recall).

        Thanks!

-Karl Fogel   <kfogel@red-bean.com>


P.S. You'll be pleased to know that since (time-forward N) still works
     for N >= 0, we've used it to pre-emptively update configure.ac.
     Emacs now configures and builds on every platform that will ever
     be made.  It wasn't easy, but at least that's one problem out of
     the way for good.  If you'd like the patch, just ask.

--8<---------------cut here---------------end--------------->8---

I really wonder that English won't change it next 200 years.  :)
But the language model in my head broke while writing about something
that'll happen in time.  >D

The only problem is that observing the current rapid development speed,
I can say that we'll get Emacs 51 well before 2050, and it's unlikely to
ever have version 51.70.4 (we'll have 51.0.50, 51.1, 51.2, 51.3 and then
we'll jump to 52.0.50).  :)

And I'm really sad that we'll still have Intel processors, X Toolkit and
domain names in 22nd century.  :/

Oh and yes, I want the configure.ac patch.  How can I contact Karl Fogel
who is 177 years in future?  ;)

-- 
Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5
Fediverse: akib@hostux.social
Codeberg: akib
emailselfdefense.fsf.org | "Nothing can be secure without encryption."

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-12  1:41           ` Michael Heerdegen
@ 2022-12-14 23:53             ` Emanuel Berg
  2022-12-16  0:25               ` Stefan Monnier via Users list for the GNU Emacs text editor
  2022-12-16  2:25               ` Michael Heerdegen
  0 siblings, 2 replies; 17+ messages in thread
From: Emanuel Berg @ 2022-12-14 23:53 UTC (permalink / raw)
  To: help-gnu-emacs

Michael Heerdegen wrote:

>>> Jokes aside: No. I'm just using a gv-setter of
>>> `current-time'. I want
>>
>> Is it something new? How this will be useful?
>
> It would be very useful but no I don't have such a thing, it
> was a joke.

Jokes that I don't understand aside, why does this return 4?

(require 'cl-lib)

(cl-loop
  for i from 0 to 1
  collect (lambda () i) into funs
  finally return (apply #'+ (mapcar #'funcall funs)) )

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-14 23:53             ` Emanuel Berg
@ 2022-12-16  0:25               ` Stefan Monnier via Users list for the GNU Emacs text editor
  2022-12-17  0:02                 ` Emanuel Berg
  2022-12-16  2:25               ` Michael Heerdegen
  1 sibling, 1 reply; 17+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2022-12-16  0:25 UTC (permalink / raw)
  To: help-gnu-emacs

> Jokes that I don't understand aside, why does this return 4?
>
> (require 'cl-lib)
>
> (cl-loop
>   for i from 0 to 1
>   collect (lambda () i) into funs
>   finally return (apply #'+ (mapcar #'funcall funs)) )

That's because you chose "0 to 1".
To get the *real* answer, you need to do "1 to 6", of course.


        Stefan




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-14 23:53             ` Emanuel Berg
  2022-12-16  0:25               ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2022-12-16  2:25               ` Michael Heerdegen
  2022-12-17  0:03                 ` Emanuel Berg
  1 sibling, 1 reply; 17+ messages in thread
From: Michael Heerdegen @ 2022-12-16  2:25 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg <incal@dataswamp.org> writes:

> Jokes that I don't understand aside, why does this return 4?
>
> (require 'cl-lib)
>
> (cl-loop
>   for i from 0 to 1
>   collect (lambda () i) into funs
>   finally return (apply #'+ (mapcar #'funcall funs)) )

Because of internal implementation details?

Michael.




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-16  0:25               ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2022-12-17  0:02                 ` Emanuel Berg
  0 siblings, 0 replies; 17+ messages in thread
From: Emanuel Berg @ 2022-12-17  0:02 UTC (permalink / raw)
  To: help-gnu-emacs

Stefan Monnier via Users list for the GNU Emacs text editor wrote:

>> (require 'cl-lib)
>>
>> (cl-loop
>>   for i from 0 to 1
>>   collect (lambda () i) into funs
>>   finally return (apply #'+ (mapcar #'funcall funs)) )
>
> That's because you chose "0 to 1". To get the *real* answer,
> you need to do "1 to 6", of course.

I don't have to check that ... 42.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-16  2:25               ` Michael Heerdegen
@ 2022-12-17  0:03                 ` Emanuel Berg
  2022-12-18  0:16                   ` Michael Heerdegen
  0 siblings, 1 reply; 17+ messages in thread
From: Emanuel Berg @ 2022-12-17  0:03 UTC (permalink / raw)
  To: help-gnu-emacs

Michael Heerdegen wrote:

>> Jokes that I don't understand aside, why does this return 4?
>>
>> (require 'cl-lib)
>>
>> (cl-loop
>>   for i from 0 to 1
>>   collect (lambda () i) into funs
>>   finally return (apply #'+ (mapcar #'funcall funs)) )
>
> Because of internal implementation details?

I don't think so, rather it has something to do with how
`cl-loop' is programmed.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-17  0:03                 ` Emanuel Berg
@ 2022-12-18  0:16                   ` Michael Heerdegen
  2022-12-19 20:36                     ` Emanuel Berg
  0 siblings, 1 reply; 17+ messages in thread
From: Michael Heerdegen @ 2022-12-18  0:16 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg <incal@dataswamp.org> writes:

> >> Jokes that I don't understand aside, why does this return 4?
> >>
> >> (require 'cl-lib)
> >>
> >> (cl-loop
> >>   for i from 0 to 1
> >>   collect (lambda () i) into funs
> >>   finally return (apply #'+ (mapcar #'funcall funs)) )
> >
> > Because of internal implementation details?
>
> I don't think so, rather it has something to do with how
> `cl-loop' is programmed.

This was a joke, right?

Anyway,

#+begin_src emacs-lisp
(macroexpand-1
 '(cl-loop
   for i from 0 to 1
   collect (lambda () i) into funs
   finally return (apply #'+ (mapcar #'funcall funs))))
  ==>
  (cl-block nil
    (let* ((i 0)
           (funs nil))
      (while (<= i 1)
        (setq funs (nconc funs (list (lambda nil i))))
        (setq i (+ i 1)))
      (apply #'+ (mapcar #'funcall funs))))
#+end_src

Nearly the same code as we had discussed.  But I guess this was all
clear to you (or not?).

Michael.




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-18  0:16                   ` Michael Heerdegen
@ 2022-12-19 20:36                     ` Emanuel Berg
  2022-12-21  8:12                       ` Michael Heerdegen
  0 siblings, 1 reply; 17+ messages in thread
From: Emanuel Berg @ 2022-12-19 20:36 UTC (permalink / raw)
  To: help-gnu-emacs

Michael Heerdegen wrote:

>   (cl-block nil
>     (let* ((i 0)
>            (funs nil))
>       (while (<= i 1)
>         (setq funs (nconc funs (list (lambda nil i))))
>         (setq i (+ i 1)))
>       (apply #'+ (mapcar #'funcall funs))))
>
> Nearly the same code as we had discussed. But I guess this
> was all clear to you (or not?).

No, where does the 4 come from?

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: cl-loop - do you understand it well?
  2022-12-19 20:36                     ` Emanuel Berg
@ 2022-12-21  8:12                       ` Michael Heerdegen
  0 siblings, 0 replies; 17+ messages in thread
From: Michael Heerdegen @ 2022-12-21  8:12 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg <incal@dataswamp.org> writes:

> >   (cl-block nil
> >     (let* ((i 0)
> >            (funs nil))
> >       (while (<= i 1)
> >         (setq funs (nconc funs (list (lambda nil i))))
> >         (setq i (+ i 1)))
> >       (apply #'+ (mapcar #'funcall funs))))
> >
> No, where does the 4 come from?

There are two closures in FUNS, and both share the same lexical variable
i.  When the closures are `funcall'ed i is bound to 2, which is the
value i had when the loop is exited.  2*2=4.

The goal of this exercise was to demonstrate that closures share
modifiable environments instead of copies of values present at closure
creation time.

Michael.



^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2022-12-21  8:12 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-10  2:22 cl-loop - do you understand it well? Emanuel Berg
2022-12-10 18:56 ` Michael Heerdegen
2022-12-10 19:00   ` Akib Azmain Turja
2022-12-10 19:35     ` tomas
2022-12-10 20:48       ` Michael Heerdegen
2022-12-11  5:57         ` Akib Azmain Turja
2022-12-11 14:43           ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-12-12  6:03             ` Akib Azmain Turja
2022-12-12  1:41           ` Michael Heerdegen
2022-12-14 23:53             ` Emanuel Berg
2022-12-16  0:25               ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-12-17  0:02                 ` Emanuel Berg
2022-12-16  2:25               ` Michael Heerdegen
2022-12-17  0:03                 ` Emanuel Berg
2022-12-18  0:16                   ` Michael Heerdegen
2022-12-19 20:36                     ` Emanuel Berg
2022-12-21  8:12                       ` Michael Heerdegen

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.