all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: How to quote a list of functions?
Date: Mon, 17 Aug 2015 05:04:45 +0200	[thread overview]
Message-ID: <87mvxqbooi.fsf@kuiper.lan.informatimago.com> (raw)
In-Reply-To: mailman.8450.1439775768.904.help-gnu-emacs@gnu.org

Emanuel Berg <embe8573@student.uu.se> writes:

> "Pascal J. Bourguignon" <pjb@informatimago.com>
> writes:
>
>> put doesn't take functions and neither does it take
>> function designators.
>
> But it does accept functions, as that piece of code
> shows, so the sharp quote syntax is even more
> confusing/tedious/error-prone as it separates
> functions from symbols, only that shouldn't always be
> done, as it depends on the function that gets the
> symbols (or functions as symbols) as well!
>
> It is very much to think about compared to just
> typing:
>
>     ;; enable commands
>     (put 'upcase-region    'disabled   nil)
>     (put 'downcase-region  'disabled   nil)
>     (put 'erase-buffer     'disabled   nil)
>     (put 'suspend-frame    'disabled   t  )
>
> Here, everyone immediately understands that
> `upcase-region' is a function and that isn't disabled
> anymore. 

NO!  This is the point exactly!

upcase-region is NOT a function.  
It is a symbol that _designates_ a function.

You could as well add a disabled key on the plist of a symbol that
doesn't designate any function.

You could use this key for something else, for example, here I "disable"
a variable:

   (defvar smurf 42)
   (defun smurf ()
     (unless (get 'smurf 'disabled)
        smurf))

   (put 'smurf 'disabled t)
   (smurf) ; --> nil

   (put 'smurf 'disabled nil)
   (smurf) ; --> 42


To begin with, what such put expression do, is not to disable functions,
but to "disable" commands (which are some kind of functions).  But this
is done by way of the symbol designating the command, and assuming some
function somewhere _interprets_ this property attached to that _symbol_.
Above it was my function named by the symbol smurf that interpreted it
for a variable named by the symbol smurf.

   (defun smurf ()
     (interactive)
     (message "Smurfed!"))
   (setf (symbol-function 'azrael) (symbol-function 'smurf))
   (put 'smurf 'disabled t)
   (smurf)  ; --> "Smurfed!"
   (azrael) ; --> "Smurfed!"
   M-x smurf RET --> "You have typed RET, invoking a disabled command…"
   M-x azrael RET and you get "Smurfed!" in the *Message* buffer and echo area.

There is a single function object for two symbols designating it:

   (eq (symbol-function 'smurf) (symbol-function 'azrael)) ; --> t

This demonstrate clearly that the mechanism to disable command is not
related to the command (or function), but to the symbol naming the
command.


> The special syntax for functions, which
> shouldn't even be used, would, if used, not clarify
> that one bit in my eyes/fingers.

Of course.


>> The thing is that the implementation of those
>> "notions" or "data abstractions" that are _symbols_,
>> _functions_ and _function designator_ can, did, and
>> will change, across time and space (space being
>> different lisp implementations).
>>
>> On the other hand, the "functional abstractions"
>> such as put don't change.
>
> I never worry what will happen. When it does, I'll
> make it work, then. People always tells me my code
> will break, but it never did. Or maybe it did and
> I fixed it, I don't know.

Of course, it depends on how many successive versions of OS and
platforms you had to pass thru.  All I can say, is that an application
that I wrote on MacOS worked perfectly thru all versions of MacOS till
the version 9, while most other developers were quite surprised to see
they had to patch their application each time a new version of the
system was released.  Either you respect the contract (specifications),
or you don't and you will suffer.

-- 
__Pascal Bourguignon__                 http://www.informatimago.com/
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk


  parent reply	other threads:[~2015-08-17  3:04 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-08 23:42 How to quote a list of functions? Marcin Borkowski
2015-08-08 23:48 ` Dmitry Gutov
2015-08-09  0:09   ` Marcin Borkowski
2015-08-09  6:18     ` Dmitry Gutov
2015-08-09  8:04       ` Marcin Borkowski
     [not found]   ` <mailman.7992.1439078979.904.help-gnu-emacs@gnu.org>
2015-08-09  0:33     ` Pascal J. Bourguignon
2015-08-09  8:06       ` Marcin Borkowski
     [not found]       ` <mailman.8016.1439107624.904.help-gnu-emacs@gnu.org>
2015-08-09 10:26         ` Pascal J. Bourguignon
2015-08-09 10:47           ` Marcin Borkowski
     [not found]           ` <mailman.8020.1439117265.904.help-gnu-emacs@gnu.org>
2015-08-09 11:42             ` Pascal J. Bourguignon
2015-08-09  1:53 ` Emanuel Berg
2015-08-09  8:05   ` Marcin Borkowski
2015-08-09 15:58     ` Emanuel Berg
     [not found]     ` <mailman.8033.1439136046.904.help-gnu-emacs@gnu.org>
2015-08-10  0:08       ` Barry Margolin
2015-08-10  2:02         ` Ian Zimmerman
2015-08-11  1:06         ` Emanuel Berg
2015-08-11  1:16           ` Emanuel Berg
     [not found]         ` <mailman.8102.1439255290.904.help-gnu-emacs@gnu.org>
2015-08-11  6:16           ` Barry Margolin
2015-08-12  2:50             ` Emanuel Berg
     [not found]             ` <mailman.8167.1439348114.904.help-gnu-emacs@gnu.org>
2015-08-12  7:01               ` Barry Margolin
2015-08-13  1:31                 ` Emanuel Berg
2015-08-13  1:56                   ` Stefan Monnier
2015-08-13  1:59                     ` Emanuel Berg
     [not found]                 ` <mailman.8228.1439429711.904.help-gnu-emacs@gnu.org>
2015-08-13  4:20                   ` Pascal J. Bourguignon
2015-08-13 23:55                     ` Emanuel Berg
2015-08-14  0:38                       ` John Mastro
2015-08-15  1:38                         ` Emanuel Berg
2015-08-15 21:16                           ` John Mastro
2015-08-16 23:56                             ` Emanuel Berg
2015-08-17  0:06                               ` Pascal J. Bourguignon
2015-08-17  0:34                                 ` Emanuel Berg
     [not found]                                 ` <mailman.8449.1439771796.904.help-gnu-emacs@gnu.org>
2015-08-17  1:19                                   ` Pascal J. Bourguignon
2015-08-17  1:40                                     ` Emanuel Berg
     [not found]                                     ` <mailman.8450.1439775768.904.help-gnu-emacs@gnu.org>
2015-08-17  2:31                                       ` Barry Margolin
2015-08-17  3:07                                         ` Pascal J. Bourguignon
2015-08-18  0:52                                         ` Emanuel Berg
     [not found]                                         ` <mailman.8494.1439859284.904.help-gnu-emacs@gnu.org>
2015-08-18  1:32                                           ` Pascal J. Bourguignon
2015-08-19  0:11                                             ` Emanuel Berg
2015-08-17  3:04                                       ` Pascal J. Bourguignon [this message]
2015-08-18  1:00                                         ` Emanuel Berg
2015-08-18  1:54                                           ` Drew Adams
2015-08-19  0:29                                             ` Emanuel Berg
2015-08-19  0:48                                               ` Emanuel Berg
2015-08-19  1:37                                               ` Drew Adams
2015-08-19 21:57                                                 ` Emanuel Berg
     [not found]                                               ` <mailman.8599.1439945431.904.help-gnu-emacs@gnu.org>
2015-08-19  1:54                                                 ` Pascal J. Bourguignon
2015-08-19  3:27                                                   ` Stefan Monnier
2015-08-19 11:54                                                     ` Pascal J. Bourguignon
2015-08-19 22:15                                                   ` get all functions (was: Re: How to quote a list of functions?) Emanuel Berg
     [not found]                                           ` <mailman.8499.1439873185.904.help-gnu-emacs@gnu.org>
2015-08-18  5:03                                             ` How to quote a list of functions? Rusi
2015-08-18 10:43                                             ` Pascal J. Bourguignon
     [not found]                                         ` <mailman.8495.1439859773.904.help-gnu-emacs@gnu.org>
2015-08-18  1:43                                           ` Pascal J. Bourguignon
2015-08-18 23:46                                             ` Emanuel Berg
     [not found]                               ` <mailman.8448.1439770003.904.help-gnu-emacs@gnu.org>
2015-08-17  0:15                                 ` Pascal J. Bourguignon
2015-08-17  6:29                               ` tomas
2015-08-18  1:03                                 ` Emanuel Berg
2015-08-18  7:44                                   ` tomas
2015-08-18 10:51                                   ` Marcin Borkowski
2015-08-19  0:34                                     ` Emanuel Berg
2015-08-19 14:22                                       ` Marcin Borkowski
2015-08-19 20:21                                         ` tomas
2015-08-21 19:27                                           ` Emanuel Berg
     [not found]                                           ` <mailman.41.1440185412.11330.help-gnu-emacs@gnu.org>
2015-08-21 20:09                                             ` Pascal J. Bourguignon
2015-08-21 23:38                                               ` Emanuel Berg
     [not found]                                               ` <mailman.49.1440200400.11330.help-gnu-emacs@gnu.org>
2015-08-21 23:46                                                 ` Pascal J. Bourguignon
2015-08-23 21:39                                                   ` Emanuel Berg
2015-08-23 22:16                                                   ` Emanuel Berg
     [not found]                                                   ` <mailman.147.1440366096.11330.help-gnu-emacs@gnu.org>
2015-08-23 23:59                                                     ` Pascal J. Bourguignon
2015-08-24  0:39                                                       ` Emanuel Berg
2015-08-24  1:42                                                       ` Emanuel Berg
     [not found]                                                       ` <mailman.1.1440425878.7866.help-gnu-emacs@gnu.org>
2015-08-24 18:42                                                         ` Pascal J. Bourguignon
2015-08-24 19:43                                                           ` Emanuel Berg
     [not found]                                                           ` <mailman.33.1440446412.28410.help-gnu-emacs@gnu.org>
2015-08-24 23:32                                                             ` Pascal J. Bourguignon
2015-08-19 22:04                                         ` Emanuel Berg
     [not found]                                   ` <mailman.8506.1439895686.904.help-gnu-emacs@gnu.org>
2015-08-18 11:18                                     ` Pascal J. Bourguignon
     [not found]                     ` <mailman.8299.1439510265.904.help-gnu-emacs@gnu.org>
2015-08-14  7:56                       ` Pascal J. Bourguignon
2015-08-15  1:30                         ` Emanuel Berg
     [not found] <mailman.7990.1439077354.904.help-gnu-emacs@gnu.org>
2015-08-09  0:30 ` Pascal J. Bourguignon
2015-08-09  1:08   ` Michael Heerdegen
     [not found]   ` <mailman.7994.1439082517.904.help-gnu-emacs@gnu.org>
2015-08-09  1:23     ` Pascal J. Bourguignon
2015-08-09  8:12   ` Marcin Borkowski

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=87mvxqbooi.fsf@kuiper.lan.informatimago.com \
    --to=pjb@informatimago.com \
    --cc=help-gnu-emacs@gnu.org \
    /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.