where clause
spir
denis.spir at gmail.com
Mon Mar 7 04:33:02 PST 2011
On 03/07/2011 09:26 AM, Russel Winder wrote:
> On Sun, 2011-03-06 at 20:23 -0500, bearophile wrote:
> [ . . . ]
>
> I wonder if you may have misunderstood the reason for the where clause
> in functional languages such as Haskell and ML (usually OCaml). In
> these languages the body of a function must be a single value-returning
> expression. This means there has to be a separate clause for all the
> declarations of the single-assignment variables -- caveat the use of
> monads
I know about nothing of Haskel and ML languages, but in Lisp-like ones there
are explicite forms for statement sequences (eg 'begin' form in Scheme). Also,
numerous special forms are implicitely sequential (eg func def or cond in Lisp
& Scheme), but not all (eg if). Thus, one can construct super-expressions in
imperative-like style. But this is not considered good style, indeed.
>> do {
>> auto r = map!(sqr)(items);
>> } where {
>> int sqr(int x) pure nothrow {
>> return x * x;
>> }
>> }
>
> What's wrong with:
>
> {
> auto sqr = function int ( int ) { return x * x ; } ;
> auto r = map ! ( sqr ) ( items ) ;
> }
>
> Seems idiomatic and straightforward with less noise?
Right. But this does not make any distinction between logical sequence and
construction sequence. A construction sequence can always, conceptually, be
(re)composed into a single complex expression. Hope I'm clear ;-)
Logically, the above indeed reads: "r is a mapping of sqr on items, where sqr
is...". Compare with:
this.update(); // effect on state
return this.filter(pred);
> [...]
[OT]
> PS I have begun to dislike languages that use semi-colon as a statement
> terminator! (It took me 4 attempts to get my two line example to
> compile :-((
(Why 4? There are only 2 ';' there.)
Lol! You're not the only one. 66% of my syntax errors are missing ';' (33% are
using '=' instead of '==' in unittest asserts, even after years of python & Lua
who inherited the same stupid operators).
See also: http://www.dwheeler.com/readable/sweet-expressions.html for an
example of trying to get rid of () noise in Lisp.
Indented D would be a great language, visually: no more {} and ';'. Then, we
could reuse {} for something else (eg set & aa literals, or template params).
We would certainly find a nice use for ';'. Using '=' for equality and eg ':='
for assignment, D would then be close to perfect in terms of base syntax ;-).
[/OT]
Denis
--
_________________
vita es estrany
spir.wikidot.com
More information about the Digitalmars-d
mailing list