Path: ...!feeds.phibee-telecom.net!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Lawrence D'Oliveiro Newsgroups: comp.lang.c Subject: Re: When Is A High/Low-Level Language Not A High/Low-Level Language? Date: Sun, 18 Aug 2024 00:23:45 -0000 (UTC) Organization: A noiseless patient Spider Lines: 75 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Sun, 18 Aug 2024 02:23:45 +0200 (CEST) Injection-Info: dont-email.me; posting-host="777ed5111cfc3eff7ef4f95b77dfec54"; logging-data="2209947"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/6QmrFXjkcvBp1iaaaWBLN" User-Agent: Pan/0.159 (Vovchansk; ) Cancel-Lock: sha1:hMTI+ngz4Cuiop7DYWvFOEYzfPY= Bytes: 3519 On Sun, 18 Aug 2024 00:20:49 +0100, Bart wrote: > On 17/08/2024 23:11, Lawrence D'Oliveiro wrote: >> >> On Sat, 17 Aug 2024 11:19:30 +0100, Bart wrote: >> >>> ... what does this have to do with C, or anything at all? >> >> C is supposed to be the epitome of the low-level language that can do >> bit-fiddling and unsafe type conversions and the like. This is an >> example of an unsafe type conversion (offering a typesafe interface to >> the caller, of course) done dynamically, in a language which is >> generally considered to be “higher-level” than C. >> >> In sum: types as first-class objects + low-level bit-fiddling = a >> combination unavailable in traditional “low-level” languages like C. >> >>> Apart from being an apallingly bit of code. >> >> How would you it less “apallingly”? >> >> (This sentence no verb. Also speling.) > > It's an adverb. Although there should have been two P's. Still not answering the question. >>> However I can't see the switch-expression; there is a Dict >>> constructor, where all elements are evaluated, not just the one >>> selected. That is not how 'switch' works. >> >> How does a switch-expression work, then? Can you give us an example? > > Take this Python code that has a similar dict constructor: > > def prnt(x): print(x); return len(x) > > i=3 a={1:prnt("One"), 2:prnt("Two"), 3:prnt("Three")}[i] > > print(a) > > It selects the third element keyed with '3', but the output is: > > One Two Three 5 > > So 'prnt' has been called 3 times instance of just once. (Also using a > non-existent key gives an error.) So do it this way: a = \ { 1 : lambda : prnt("One"), 2 : lambda : prnt("Two"), 3 : lambda : prnt("Three"), }[i]() > (Also using a non-existent key gives an error.) Want a default case for your switch? Easy: a = \ { 1 : lambda : prnt("One"), 2 : lambda : prnt("Two"), 3 : lambda : prnt("Three"), }.get(i, lambda : «default»)() You think this is somehow new to me? It’s all covered here: > The equivalent using 'switch' in one of my languages ... If you want an unlabelled switch, that’s covered in the above notebook, too.