Alternative topological sorting implementation
Maxime Devos
(13 Apr 2023 15:12 UTC)
|
Re: Alternative topological sorting implementation
Marc Nieper-Wißkirchen
(13 Apr 2023 15:29 UTC)
|
Re: Alternative topological sorting implementation
Maxime Devos
(13 Apr 2023 16:00 UTC)
|
Re: Alternative topological sorting implementation Marc Nieper-Wißkirchen (13 Apr 2023 20:18 UTC)
|
Re: Alternative topological sorting implementation
Marc Nieper-Wißkirchen
(13 Apr 2023 20:35 UTC)
|
Re: Alternative topological sorting implementation
Maxime Devos
(17 Apr 2023 21:33 UTC)
|
Re: Alternative topological sorting implementation
Marc Nieper-Wißkirchen
(18 Apr 2023 05:58 UTC)
|
Re: Alternative topological sorting implementation
Maxime Devos
(18 Apr 2023 07:53 UTC)
|
Re: Alternative topological sorting implementation
Maxime Devos
(17 Apr 2023 21:13 UTC)
|
Am Do., 13. Apr. 2023 um 18:00 Uhr schrieb Maxime Devos <xxxxxx@telenet.be>: > > > > Op 13-04-2023 om 17:29 schreef Marc Nieper-Wißkirchen: > > Hi Maxime, > > > > Thanks for sharing your code! > > > > I don't see many delimited continuations at work, though. The > > continuation-related primitive in your code is basically > > abort-to-prompt, which is here of equal power as C's longjmp or other > > languages throw/catch (and reflects the most typical use of Scheme's > > classical call/cc). But maybe I miss something in your code. > > I won't comment on longjmp because that's too long ago for me. In Scheme terms, this just describes one-shot escaping continuations. > Maybe it is just throw/catch in disguise, but I don't see it -- on line > 57 + 66/70, the continuation is reinstated, which isn't something you > can do with throw/catch; you need raise-continuable/guard for that. Ah, I should have taken a closer look at Guile's primitives. I only Racket's and the ones I wrote down in SRFI 226 by heart. Guile's abort-to-prompt does not only abort to the prompt but also captures the delimited continuation, which I didn't know. I looked for some instance of call/cc or call-with-delimited-continuation or the like. > I'm not sure if raise-continuable/guard is sufficient because there is > also a little state ('visiting' and 'visited') and I wanted to avoid > 'set!', but perhaps I'm just implementing 'set!' in terms of delimited > continuations here. Raise-continuable does no magic; guard uses continuations but mostly only to install the correct dynamic environment (and to be able the handler to escape with-exception-handler). If catch/throw is not enough raise-continuable/guard is neither. The state (which you don't modify explicitly with set!) is hidden in the implicit continuation of Scheme's evaluation model. You may want to look at the "state handler" examples here: https://github.com/mnieper/scheme-libraries/blob/main/test-effect.scm. Cheers, and thanks for giving me an opportunity to learn about Guile's abort-to-prompt! Marc PS If you want your algorithm pure but without delimited continuations, I guess you have to change the for-each in line 51 into a fold so that you can explicitly move state around. > > > [...] > > Greetings, > Maxime.