Here are some stupid reader tricks for Lisp. I've tested them on SBCL, and they are of questionable portability and utility.
Run Shell Commands from the Lisp Prompt
(set-macro-character #\! (lambda (stream char) (declare (ignore stream char)) (uiop:run-program (read-line stream) :output *standard-output*)) t) > !ls -als total 4068 4 drwxr-x--- 21 jrm jrm 4096 Apr 18 06:42 . 4 drwxr-xr-x 4 root root 4096 Mar 22 17:27 .. 1900 -rwx--x--x 1 jrm jrm 1940604 Apr 17 19:10 .bash_history 4 -rw-r--r-- 1 jrm jrm 220 Mar 19 12:16 .bash_logout 8 -rw-r--r-- 1 jrm jrm 4961 Apr 1 11:13 .bashrc 4 drwx------ 6 jrm jrm 4096 Mar 21 07:52 .cache 0 lrwxrwxrwx 1 jrm jrm 51 Mar 24 05:20 .config -> /mnt/c/Users/JosephMarshall/AppData/Roaming/.config 0 lrwxrwxrwx 1 jrm jrm 50 Mar 26 03:12 .emacs -> /mnt/c/Users/JosephMarshall/AppData/Roaming/.emacs 4 drwx------ 6 jrm jrm 4096 Apr 17 12:13 .emacs.d ... etc ... >
Make λ an alias for lambda
(set-macro-character #\λ (lambda (stream char) (declare (ignore stream char)) 'cl:lambda) t) > ((λ (x) (+ x 4)) 3) 7
If you do this you might want to add a print function for the lambda symbol:
(defmethod print-object ((obj (eql 'cl:lambda)) stream) ;; doubt this is portable (format stream "λ")) > '(λ (x) (+ x 4)) (λ (x) (+ x 4)) > (symbol-name (car *)) "LAMBDA"
2 comments:
Alfred had issues with the blogger comments, so I'm posting his response;
I did something similar in Emacs some time back, and then added a few more mappings later but never updated the function name 😏 (Blogger wouldn't let me post this as a comment for some reason):
;;; display “lambda” as “λ”
(global-prettify-symbols-mode 1)
(defun my-add-pretty-lambda ()
"make some word or string show as pretty Unicode symbols"
(setq prettify-symbols-alist
'(
("lambda" . 955) ; λ
("->" . 8594) ; →
("=>" . 8658) ; ⇒
("map" . 8614) ; ↦
)))
(add-hook 'emacs-lisp-mode-hook 'my-add-pretty-lambda)
Blogger tip: Replace space characters with unicode non-breaking space to preserve indentation.
Post a Comment