From: Tassilo Horn <tsdh@gnu.org>
To: Heime via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org>
Cc: Heime <heimeborgia@protonmail.com>
Subject: Re: Keywords as function arguments for control flow
Date: Fri, 29 Nov 2024 07:18:29 +0100 [thread overview]
Message-ID: <87y1125zre.fsf@gnu.org> (raw)
In-Reply-To: <T-8Wb0ikJiYgxU35wDfVKEm_z8FfK1LYjqjopC3FsLiVqAHISqrEcfbDrOsgyVEp9tbon_DeQrwnL9KmrzqOevlLfGy-s_nrMUONUhA6ovU=@protonmail.com> (Heime via Users list for the's message of "Thu, 28 Nov 2024 15:21:27 +0000")
Heime via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> writes:
> How cam one use function arguments that use keywords for
> applying control operations with pcase or cond?
>
> Consider this as example
>
> (defun cuprat (seqr)
>
> (if (eq seqr 'global)
> (global-whitespace-mode 1)
> (whitespace-mode 1)) )
>
> (cuprat 'global)
Your example uses symbols not keywords. Here are three versions which
just return the keywords :global / :not-global instead of activating a
mode just for better experimentation. You can replace :global and
:not-global with (global-whitespace-mode 1) and (whitespace-mode 1) to
get your actual function.
--8<---------------cut here---------------start------------->8---
(defun cuprat (seqr)
(cl-case seqr
(global :global)
;; Fallback case with `otherwise' or `t'.
(otherwise :not-global)))
(cuprat 'global)
;;=> :global
(cuprat nil)
;;=> :not-global
(cuprat 'foobar)
;;=> :not-global
(defun cuprat2 (seqr)
(pcase seqr
('global :global)
(t :not-global)))
(cuprat2 'global)
;;=> :global
(cuprat2 nil)
;;=> :not-global
(cuprat2 'foobar)
;;=> :not-global
(defun cuprat3 (seqr)
(cond
((eq seqr 'global) :global)
(t :not-global)))
(cuprat3 'global)
;;=> :global
(cuprat3 nil)
;;=> :not-global
(cuprat3 'foobar)
;;=> :not-global
--8<---------------cut here---------------end--------------->8---
You can easily go from symbols (global) to keywords (:global) just by
replacing global with :global in which case you can also drop all
quoting, i.e., 'global becomes just :global.
Bye,
Tassilo
next prev parent reply other threads:[~2024-11-29 6:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-28 15:21 Keywords as function arguments for control flow Heime via Users list for the GNU Emacs text editor
2024-11-29 6:18 ` Tassilo Horn [this message]
2024-11-29 21:06 ` [External] : " Drew Adams
2024-11-29 21:26 ` Heime via Users list for the GNU Emacs text editor
2024-11-30 11:47 ` Jean Louis
2024-11-30 11:55 ` Heime via Users list for the GNU Emacs text editor
2024-11-30 14:37 ` Jean Louis
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y1125zre.fsf@gnu.org \
--to=tsdh@gnu.org \
--cc=heimeborgia@protonmail.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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).