Deutsch   English   Français   Italiano  
<vgfepe$22j2u$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: else ladders practice
Date: Wed, 6 Nov 2024 10:01:16 +0000
Organization: A noiseless patient Spider
Lines: 50
Message-ID: <vgfepe$22j2u$1@dont-email.me>
References: <3deb64c5b0ee344acd9fbaea1002baf7302c1e8f@i2pn2.org>
 <vg2llt$38ons$1@dont-email.me>
 <2491a699388b5891a49ef960e1ad8bb689fdc2ed@i2pn2.org>
 <b681ee05856e165c26a5c29bf42a8d9d53843d6d@i2pn2.org>
 <vg2ttn$3a4lk$1@dont-email.me> <vg33gs$3b8n5$1@dont-email.me>
 <vg358c$3bk7t$1@dont-email.me> <vg37nr$3bo0c$1@dont-email.me>
 <vg3b98$3cc8q$1@dont-email.me> <vg5351$3pada$1@dont-email.me>
 <vg62vg$3uv02$1@dont-email.me> <vgd3ro$2pvl4$1@paganini.bofh.team>
 <vgd6jh$1hmjc$1@dont-email.me> <vgds97$2r682$1@paganini.bofh.team>
 <vgdvfj$1m6ho$1@dont-email.me> <vge84o$1o57r$2@dont-email.me>
 <20241105173408.11@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 06 Nov 2024 11:01:18 +0100 (CET)
Injection-Info: dont-email.me; posting-host="425dce3b00381c91a014107c93c4293b";
	logging-data="2182238"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19+otMr9qcRUGDGW8dm7Qf/"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:BSDxwOgP8BS92uPpFjhAxTVqu+0=
Content-Language: en-GB
In-Reply-To: <20241105173408.11@kylheku.com>
Bytes: 3130

On 06/11/2024 07:26, Kaz Kylheku wrote:
> On 2024-11-05, Bart <bc@freeuk.com> wrote:

>> Well, it started off as 2-way select, meaning constructs like this:
>>
>>      x = c ? a : b;
>>      x := (c | a | b)
>>
>> Where one of two branches is evaluated. I extended the latter to N-way
>> select:
>>
>>      x := (n | a, b, c, ... | z)
> 
> This looks quite error-prone. You have to count carefully that
> the cases match the intended values. If an entry is
> inserted, all the remaining ones shift to a higher value.
> 
> You've basically taken a case construct and auto-generated
> the labels starting from 1.

It's a version of Algol68's case construct:

    x := CASE n IN a, b, c OUT z ESAC

which also has the same compact form I use. I only use the compact 
version because n is usually small, and it is intended to be used within 
an expression: print (n | "One", "Two", "Three" | "Other").

This an actual example (from my first scripting language; not written by 
me):

      Crd[i].z := (BendAssen |P.x, P.y, P.z)

An out-of-bounds index yields 'void' (via a '| void' part inserted by 
the compiler). This is one of my examples from that era:

   xt := (messa | 1,1,1, 2,2,2, 3,3,3)
   yt := (messa | 3,2,1, 3,2,1, 3,2,1)

Algol68 didn't have 'switch', but I do, as well as a separate 
case...esac statement that is more general. Those are better for 
multi-line constructs.

As for being error prone because values can get out of step, so is a 
function call like this:

    f(a, b, c, d, e)

But I also have keyword arguments.