all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Arthur Miller <arthur.miller@live.com>
To: Yuri Khan <yuri.v.khan@gmail.com>
Cc: Philip Kaludercic <philipk@posteo.net>,
	 "Alfred M. Szmidt" <ams@gnu.org>,
	 emacs-devel@gnu.org
Subject: Re: cond* vs pcase
Date: Wed, 07 Feb 2024 13:43:30 +0100	[thread overview]
Message-ID: <DU2PR02MB1010957DC7792B6B841C5892496452@DU2PR02MB10109.eurprd02.prod.outlook.com> (raw)
In-Reply-To: <CAP_d_8WBSZ3LHObvWbUVyB4B0YF=1YeKZ-OwtPRfqT1swWNJ0Q@mail.gmail.com> (Yuri Khan's message of "Wed, 7 Feb 2024 12:32:25 +0700")

Yuri Khan <yuri.v.khan@gmail.com> writes:

> On Wed, 7 Feb 2024 at 01:58, Philip Kaludercic <philipk@posteo.net> wrote:
>
>> Please don't be dishonest; My question was why cl-case was more
>> appropriate than pcase, where both are macros that boil down to simpler
>> primitives.
>
> The design principle that Alfred alludes to is known as the [Rule of
> Least Power][0]. That advocates using the least powerful construct
> that still does the job. Like specialized mapcar instead of a
> general-purpose while loop, or an http client instead of coding
> directly against tcp sockets.
>
> [0]: https://en.wikipedia.org/wiki/Rule_of_least_power

I think it is a bad application of this principle in this context. Sitting an
deciding if there is a less-powerful condition form, or mapping functon for the
job sounds to me like a peep-hole optimization of Lisp, and as Monnier said
once, without benefit of the additional speed.

Before someone pulls out "eval"; that would be a completely different case, pun
intended.

I am not sure if Alfred meant that in his first message, perhaps he did, but
Drew seems to be more in line with that thinking. At least I understand him so.

If we going to have guiding principles that help us construct our programs, in
my opinion PAIP book by P. Norvig has few good advices:

    * Be specific.
    * Use abstractions.
    * Be concise.
    * Use the provided tools.
    * Don't be obscure.
    * Be consistent.

He sas:

    "Sometimes, however, the maxims are in conflict, and experience will tell
    you which one to prefer."

Than comes the example with push vs setf, with reasoning about both, which he
finnishes with following advice:

    "Whichever choice you make on such issues, remember the sixth maxim: be
    consistent."

Which I think is the most relevant for this discussion.

https://norvig.github.io/paip-lisp/#/chapter3

(It is Free to read and put online by the author himself.)




  reply	other threads:[~2024-02-07 12:43 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-05 14:30 cond* vs pcase Arthur Miller
2024-02-05 15:13 ` Eli Zaretskii
2024-02-05 16:06 ` Alfred M. Szmidt
2024-02-05 18:39   ` Philip Kaludercic
2024-02-06 12:30     ` Arthur Miller
2024-02-06 16:17     ` Alfred M. Szmidt
2024-02-06 16:35       ` [External] : " Drew Adams
2024-02-06 16:50       ` Philip Kaludercic
2024-02-06 17:27         ` Alfred M. Szmidt
2024-02-06 18:57           ` Philip Kaludercic
2024-02-06 19:04             ` Alfred M. Szmidt
2024-02-06 19:39               ` Philip Kaludercic
2024-02-06 23:17                 ` [External] : " Drew Adams
2024-02-06 19:12             ` Drew Adams
2024-02-06 20:08               ` Adam Porter
2024-02-06 23:32                 ` Drew Adams
2024-02-07 13:14                   ` Arthur Miller
2024-02-07 13:43                     ` Po Lu
2024-02-07 17:09                       ` Drew Adams
2024-02-07 17:44                       ` Tomas Hlavaty
2024-02-09  3:52                         ` Richard Stallman
2024-02-07 18:00                       ` Arthur Miller
2024-02-07 18:22                         ` Alfred M. Szmidt
2024-02-08  1:55                           ` Po Lu
2024-02-08  2:49                             ` Philip Kaludercic
2024-02-08  3:36                               ` Po Lu
2024-02-08  7:04                             ` Eli Zaretskii
2024-02-08 17:01                               ` Alfred M. Szmidt
2024-02-08 17:01                             ` Alfred M. Szmidt
2024-02-09  1:30                               ` Po Lu
2024-02-08  5:01                         ` Po Lu
     [not found]                           ` <DU2PR02MB10109B7AC39F995BFE266EF5396442@DU2PR02MB10109.eurprd02.prod.outlook.com>
2024-02-08  7:36                             ` Sv: " Arthur Miller
2024-02-12 21:39                       ` Stefan Monnier via Emacs development discussions.
2024-02-07 17:14                     ` Drew Adams
2024-02-07  5:32             ` Yuri Khan
2024-02-07 12:43               ` Arthur Miller [this message]
2024-02-07 17:41                 ` Alfred M. Szmidt
2024-02-07 18:36                   ` Arthur Miller
2024-02-07 19:12                     ` Alfred M. Szmidt
2024-02-07 21:20                       ` Arthur Miller
2024-02-06 17:29         ` [External] : " Drew Adams
2024-02-06 17:41           ` Alfred M. Szmidt
2024-02-06 17:50         ` Thierry Volpiatto
2024-02-06 19:04           ` Alfred M. Szmidt
2024-02-07 15:03           ` Barry Fishman
2024-02-07 17:22             ` [External] : " Drew Adams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DU2PR02MB1010957DC7792B6B841C5892496452@DU2PR02MB10109.eurprd02.prod.outlook.com \
    --to=arthur.miller@live.com \
    --cc=ams@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=philipk@posteo.net \
    --cc=yuri.v.khan@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.