[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [External] : Re: Function that changes value of a variable
From: |
Drew Adams |
Subject: |
RE: [External] : Re: Function that changes value of a variable |
Date: |
Sun, 21 Aug 2022 13:47:47 +0000 |
> (defun constrain (variable min-n max-n)
> (cond
> ((< (symbol-value variable) min-n)
> (set variable min-n))
> ((> (symbol-value variable) max-n)
> (set variable max-n))
> ((eq (symbol-value variable) t)
> (set variable 1))
> ((eq (symbol-value variable) nil)
> (set variable 0))))
1. Evaluate the initial value just once - bind
a local variable.
2. Make obvious to readers that the function
always sets the var (if numberp, t, or nil)
- put the `set' on the outside.
(defun constrain (variable min-n max-n)
(let ((val (symbol-value variable)))
(when (or (numberp val) (memq val '(nil t)))
(set variable (if (numberp val)
(if (< val min-n)
min-n
(min max-n val))
(if val 1 0))))))
3. Your function doesn't change the value, if
if not a number, t, or nil. Is that what
you really want? If not:
(defun constrain (variable min-n max-n)
(let ((val (symbol-value variable)))
(unless (or (numberp val) (memq val '(nil t)))
(error "Oops?! `%s' is %S" variable val))
(set variable (if (numberp val)
(if (< val min-n)
min-n
(min max-n val))
(if val 1 0)))))
<<attachment: winmail.dat>>