On Sat, Jul 28, 2012 at 5:03 PM, Orivej Desh orivej@gmx.fr wrote:
On 20 June 2011 22:28, Luís Oliveira luismbo@gmail.com wrote:
We just came across an issue on #quicklisp where a user had set his *PRINT-CASE* to :DOWNCASE and that caused FORMAT-SYMBOL to intern lower-case symbols, thus breaking the idiom I described.
Should fix my code to use SYMBOLICATE instead or should FORMAT-SYMBOL use WITH-STANDARD-IO-SYNTAX?
Any opinions?
Nikodemus Siivola nikodemus@random-state.net replied:
Using W-S-IO-S in FORMAT-SYMBOL sounds reasonable to me.
This has not been done, and is still needed. In particular, osicat-sys has (alexandria:format-symbol t "~A-~A" name '#:designator).
Speaking of symbolicate and format symbol, could we have something like the code below?
Also can alexandria depend on asdf? If so, can we just reexport some ASDF utilities? Or else, can alexandria duplicate them? appendf, orf, strcat come to mind. Maybe also probe-file*, find-symbol*, while-collecting. Might already exist under different names: length=n-p, first-char, last-char, remove-keys, remove-keywords. Things that are incompatible: ends-with
Also, no one replied to my previous nest proposals:
(defmacro nest (&rest things) (reduce #'(lambda (outer inner) (append outer (list inner))) things :from-end t)) (defmacro tsen (&rest things) (reduce #'(lambda (inner outer) (append outer (list inner))) things :from-end nil))
(in-package :alexandria)
(defun convert-to-string (x) "transform some stuff into a string" (typecase x (string x) (null "") (character (string x)) (symbol (symbol-name x)) (t (with-standard-io-syntax (princ-to-string x)))))
(defun reduce/strcat (string-list &key (element-type 'character) new) "concatenate the contents" (cond ((null string-list) "") ((and (null (cdr string-list)) (not new)) (first string-list)) (t (loop :with length = (reduce #'+ string-list :key #'length) :with result = (make-string length :element-type element-type) :for index = 0 :then (+ index (length string)) :for string :in string-list :do (replace result string :start1 index) :finally (return result)))))
(defun stringicate (&rest rest) "make a string by concatenating stuff" (reduce/strcat (mapcar #'convert-to-string rest)))
(defun symbolicate-in (package &rest rest) (maybe-intern (apply 'stringicate rest) package))
(defun symbolicate (&rest rest) (apply 'symbolicate-in *package* rest))
(defun keywordicate (&rest rest) (apply 'symbolicate-in :keyword rest))
(defun gensymicate (&rest rest) (gensym (apply 'stringicate rest)))
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Any sufficiently advanced bug is indistinguishable from a feature. — Rich Kulawiec