[Ecls-list] APROPOS issues, proposed enhancement

Matthew Mondor mm_lists at pulsar-zone.net
Wed Jun 27 09:29:11 UTC 2012


On Wed, 27 Jun 2012 02:23:07 -0400
Matthew Mondor <mm_lists at pulsar-zone.net> wrote:

> (defun apropos (string &optional package)

Alternate implementation:

(defun symbol-apropos-to-string (symbol)
  (let ((out '()))
    (macrolet ((push-string (string)
                 `(push ,string out)))
      (push-string (prin1-to-string symbol))
      (when (fboundp symbol)
        (if (special-operator-p symbol)
            (push-string "  Special form")
            (if (macro-function symbol)
                (push-string "  Macro")
                (push-string "  Function"))))
      (when (boundp symbol)
        (if (constantp symbol)
            (push-string "  Constant: ")
            (push-string "  has value: "))
        (push-string (prin1-to-string (symbol-value symbol))))
      (apply #'concatenate 'string (nreverse out)))))

(defun apropos (string &optional package)
  "Args: (string &optional (package nil))
Prints those symbols whose print-names contain STRING as substring.  If
PACKAGE is non-NIL, then only the specified PACKAGE is searched."
  (setq string (string string))
  (mapc #'(lambda (string)
            (princ string)
            (terpri))
        (loop
           with dupes = (sort (mapcar #'symbol-apropos-to-string
                                      (apropos-list string package))
                              #'string-lessp)
           for prec = nil then item
           for item in dupes
           unless (and prec (string-equal prec item)) collect item))
  (values))

-- 
Matt




More information about the ecl-devel mailing list