Elisp: Function Keyword Parameters (Named Parameters)

By Xah Lee. Date: . Last updated: .

Function Keyword Parameters (Named Parameters)

Emacs lisp does not support named parameter.

But by emacs convention, it is emulated using Keyword Symbol as parameter names and Property List mechanism.

;; -*- coding: utf-8; lexical-binding: t; -*-

(defun my-test (first-arg &rest keyword-args)
  "demo of using plist as optional named params with default values.

keyword-args is any number of pairs of key and value.

The following keys are recognized and their default:
:a 1
:b nil
:c t

Any other key value are ignored.

version: 2026-02-19"
  (interactive)
  (let (
        ;; xdefaults is a association list, of default values
        (xdefaults (list (cons :a 1) (cons :b nil) (cons :c t)))
        ;; xvalues is a association list, of actual values
        xvalues)
    (mapc
     (lambda (x)
       (let ((xkey (car x)))
         (push
          (cons
           xkey
           (if (plist-member keyword-args xkey)
               (plist-get keyword-args xkey)
             (alist-get xkey xdefaults)))
          xvalues)))
     xdefaults)
    (message (format "
:a is %s
:b is %s
:c is %s
"
                     (alist-get :a xvalues)
                     (alist-get :b xvalues)
                     (alist-get :c xvalues)))))

;; s------------------------------
;; test

(my-test 3)
"
:a is 1
:b is nil
:c is t
"

(my-test 3 :a t)
"
:a is t
:b is nil
:c is t
"

(my-test 3 :b t)
"
:a is 1
:b is t
:c is t
"

(my-test 3 :a t :b t)
"
:a is t
:b is t
:c is t
"

(my-test 3 :a nil :b nil)
"
:a is nil
:b is nil
:c is t
"

(my-test 3 :a 5 :b 6)
"
:a is 5
:b is 6
:c is t
"

(my-test 3 :c 4)
"
:a is 1
:b is nil
:c is 4
"

Elisp, Function