vendor/quickutils.lisp @ cd52795d9ecd default tip
Update URLs
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Tue, 14 Jan 2020 19:53:05 -0500 |
| parents | d997d6e268a3 |
| children | (none) |
;;;; This file was automatically generated by Quickutil. ;;;; See http://quickutil.org for details. ;;;; To regenerate: ;;;; (qtlc:save-utils-as "quickutils.lisp" :utilities '(:SYMB :WITH-GENSYMS) :ensure-package T :package "PCG.QUICKUTILS") (eval-when (:compile-toplevel :load-toplevel :execute) (unless (find-package "PCG.QUICKUTILS") (defpackage "PCG.QUICKUTILS" (:documentation "Package that contains Quickutil utility functions.") (:use #:cl)))) (in-package "PCG.QUICKUTILS") (when (boundp '*utilities*) (setf *utilities* (union *utilities* '(:MKSTR :SYMB :STRING-DESIGNATOR :WITH-GENSYMS)))) (defun mkstr (&rest args) "Receives any number of objects (string, symbol, keyword, char, number), extracts all printed representations, and concatenates them all into one string. Extracted from _On Lisp_, chapter 4." (with-output-to-string (s) (dolist (a args) (princ a s)))) (defun symb (&rest args) "Receives any number of objects, concatenates all into one string with `#'mkstr` and converts them to symbol. Extracted from _On Lisp_, chapter 4. See also: `symbolicate`" (values (intern (apply #'mkstr args)))) (deftype string-designator () "A string designator type. A string designator is either a string, a symbol, or a character." `(or symbol string character)) (defmacro with-gensyms (names &body forms) "Binds each variable named by a symbol in `names` to a unique symbol around `forms`. Each of `names` must either be either a symbol, or of the form: (symbol string-designator) Bare symbols appearing in `names` are equivalent to: (symbol symbol) The string-designator is used as the argument to `gensym` when constructing the unique symbol the named variable will be bound to." `(let ,(mapcar (lambda (name) (multiple-value-bind (symbol string) (etypecase name (symbol (values name (symbol-name name))) ((cons symbol (cons string-designator null)) (values (first name) (string (second name))))) `(,symbol (gensym ,string)))) names) ,@forms)) (defmacro with-unique-names (names &body forms) "Binds each variable named by a symbol in `names` to a unique symbol around `forms`. Each of `names` must either be either a symbol, or of the form: (symbol string-designator) Bare symbols appearing in `names` are equivalent to: (symbol symbol) The string-designator is used as the argument to `gensym` when constructing the unique symbol the named variable will be bound to." `(with-gensyms ,names ,@forms)) (eval-when (:compile-toplevel :load-toplevel :execute) (export '(symb with-gensyms with-unique-names))) ;;;; END OF quickutils.lisp ;;;;