Re: Value or symbol handler with max argument error fix
tpeplt <[email protected]>
| Newsgroups | gmane.emacs.help |
|---|---|
| Message-ID | <[email protected]> |
Heime <[email protected]> writes: > I want to pass either a symbol or the value to lana-du-fpln. > > (lana-du-fpln myplist) > (lana-du-fpln 'myplist) > > I am getting Lisp error: (wrong-number-of-arguments #<subr max> 0) > max() > apply(max nil) > (max 5 (apply #'max kl)) > > for this function > > (defun lana-du-fpln (datenstruk) > "Display HASH-TABLE contents in a dedicated buffer." > > (let* ( (bfr (get-buffer-create (or bname "Lana DU"))) > ‘bname’ is undefined in this function. > (dtnm (if (symbolp datenstruk) (symbol-name datenstruk) "Anonymous")) ‘dtnm’ is assigned a value but never used in this function. > (dtvl (if (symbolp datenstruk) (symbol-value datenstruk) datenstruk)) > > ;; Display width using key lengths > (kl (map-apply > (lambda (key _value) (length (format "%s" key))) > dtvl)) > (wl (max 5 (apply #'max kl))) ‘wl’ is assigned a value but never used in this function. If this variable is not needed in this function, then eliminating this assignment will resolve your run-time error. The run-time error is occurring because your code does not account for the possibility that the value of ‘kl’ could be an empty list (nil). > > (gwidth 2) > (fmt-str (format "%%-%ds | %%-%ds | %%s\n" gwidth kwmax)) ) ‘kwmax’ is undefined in this function. > > (with-current-buffer bfr > (read-only-mode 0) > (erase-buffer) > > (map-do > ;; FUNCITON > (lambda (key value) > (let* ( (fkey (format "%s" key)) > (fval (format "%s" value)) > (sgnl (if (file-directory-p fval) > (propertize " " 'face lmps) ‘lmps’ is undefined in this function. > (propertize " " 'face lmpw))) ‘lmpw’ is undefined in this function. > (pkey (if (file-directory-p fval) > (propertize fkey 'face gjsf) ‘gjsf’ is undefined in this function. > (propertize fkey 'face gjwf))) ) ‘gjwf’ is undefined in this function. > (insert (format fmt-str sgnl pkey fval)))) > ;; MAP Data Structure (HASH-TABLE/PLIST/ALIST) > dtvl) > > (goto-char (point-min))) > > (pop-to-buffer bfr))) > You might consider moving the ‘(map-do ...)’ expression to its own function definition that is called with ‘dtvl’ as its argument. Also, the near-duplicate code ‘(if (file-directory-p)...)’ might be a good candidate for a function that is called twice. -- The lyf so short, the craft so long to lerne. - Geoffrey Chaucer, The Parliament of Birds.