From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: How to quote a list of functions?
Date: Sun, 09 Aug 2015 13:42:51 +0200 [thread overview]
Message-ID: <87fv3shemc.fsf@kuiper.lan.informatimago.com> (raw)
In-Reply-To: mailman.8020.1439117265.904.help-gnu-emacs@gnu.org
Marcin Borkowski <mbork@mbork.pl> writes:
> On 2015-08-09, at 12:26, Pascal J. Bourguignon <pjb@informatimago.com> wrote:
>
>> Marcin Borkowski <mbork@mbork.pl> writes:
>>
>>> On 2015-08-09, at 02:33, Pascal J. Bourguignon <pjb@informatimago.com> wrote:
>>>
>>>> Marcin Borkowski <mbork@mbork.pl> writes:
>>>>
>>>>> OK, but this seems a bit awkward, especially for my second example,
>>>>> which would then become
>>>>>
>>>>> (list (list #'function argument) ...)
>>>>
>>>> `((,(function f) ,(gen 42)))
>>>
>>> What do you mean by `gen'? My Emacs (25.0.50.1) doesn't have such
>>> a function.
>>
>> Why do I mean by f?
>
> OK, but (AFAIUC) in the above form `function' gets evaluated (so that
> the symbol `f' -- the function name -- ends up in the list), and then
> Emacs tries to /evaluate/ the form `(gen 42)'. This probably fooled me
> (again). Do I get it right that you wanted to show how to generate the
> argument dynamically and not put a constant in the whole expression?
Right!
I thought it would be obvious, because I misread what you wanted to do
when you wrote:
> (setq custom-format '((format-field-one 4) ...))?
I thought you wanted to generate a field formater function created by
the expression: (format-field-one 4).
But now I'm reading:
> (defun format-field-one (record width)
> (format (format "%%%ds" width) (cdr (assoc 'field-one record))))
>
> I want to be able to include in my custom "format" things like
>
> (format-field-one 4)
and I realize that (format-field-one 4) is meaningless.
I'm sorry, I'm often misled when people say there's a problem when there
is no problem:
(defun format-field-one (record width)
(format (format "%%%ds" width) (cdr (assoc 'field-one record))))
(setq custom-format '((format-field-one 4)))
(let ((record-list '(((field-one . 33))
((field-one . 42)))))
(mapcar (lambda (record)
(mapcar (lambda (field-specifier)
(apply (car field-specifier)
record
(cdr field-specifier)))
custom-format))
record-list))
--> ((" 33") (" 42"))
And as seen in the rest of the discussion, writting it as:
(setq custom-format `((,#'format-field-one 4)))
--> ((format-field-one 4))
instead of:
(setq custom-format '((format-field-one 4)))
--> ((format-field-one 4))
wouldn't change anything in emacs lisp.
On the other hand, you could write a function to generate a closure to
format fields:
(setf lexical-binding t) ; why isn't it the default already?
(defun generate-field-formatter (width)
(let ((format-control (format "%%%ds" width)))
(lambda (record)
(format format-control (cdr (assoc 'field-one record))))))
(setq custom-format `(,(generate-field-formatter 4)))
;; --> ((closure ((format-control . "%4s") (width . 4) t) (record) (format format-control (cdr (assoc (quote field-one) record)))))
(let ((record-list '(((field-one . 33))
((field-one . 42)))))
(mapcar (lambda (record)
(mapcar (lambda (field-formatter)
(funcall field-formatter record))
custom-format))
record-list))
;; --> ((" 33") (" 42"))
and here, I discover an horrible bug in emacs-version "24.3.1":
(byte-compile 'generate-field-formatter)
;; --> #[(width) "\301\302\b\"\210\303\207" [width format "%%%ds" #[(record) "\302\b\303\304 \"A\"\207" [format-control record format assoc field-one] 5]] 3]
(setq custom-format `(,(generate-field-formatter 4)))
;; --> (#[(record) "\302\b\303\304 \"A\"\207" [format-control record format assoc field-one] 5])
(let ((record-list '(((field-one . 33))
((field-one . 42)))))
(mapcar (lambda (record)
(mapcar (lambda (field-formatter)
(funcall field-formatter record))
custom-format))
record-list))
Debugger entered--Lisp error: (void-variable format-control)
--
__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
next prev parent reply other threads:[~2015-08-09 11:42 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 [this message]
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
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=87fv3shemc.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.