Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on Lisps that are not Emacs Lisp.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/lisp.e>
#           or at <http://angg.twu.net/e/lisp.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######





# «.character»			(to "character")
# «.declaim»			(to "declaim")
# «.declare»			(to "declare")
# «.defalias»			(to "defalias")
# «.defclass»			(to "defclass")
# «.defmacro»			(to "defmacro")
# «.defmacro-ignorable»		(to "defmacro-ignorable")
# «.defmethod»			(to "defmethod")
# «.defvar»			(to "defvar")
# «.describe»			(to "describe")
# «.destructuring-bind»		(to "destructuring-bind")
# «.eval-when»			(to "eval-when")
# «.flet»			(to "flet")
# «.format»			(to "format")
# «.format-recipes»		(to "format-recipes")
# «.get»			(to "get")
# «.getenv»			(to "getenv")
# «.iterate»			(to "iterate")
# «.letf»			(to "letf")
# «.loop»			(to "loop")
# «.make-array»			(to "make-array")
# «.make-string»		(to "make-string")
# «.map»			(to "map")
# «.mapconcat»			(to "mapconcat")
# «.multiple-value-bind»	(to "multiple-value-bind")
# «.newline»			(to "newline")
# «.packages»			(to "packages")
#   «.in-package»		(to "in-package")
#   «.features»			(to "features")
#   «.require»			(to "require")
#   «.delete-package»		(to "delete-package")
# «.read»			(to "read")
# «.reduce»			(to "reduce")
# «.repl-prompt»		(to "repl-prompt")
# «.sharpsign-dot»		(to "sharpsign-dot")
# «.sharpsign-minus»		(to "sharpsign-minus")
# «.sharpsign-plus»		(to "sharpsign-plus")
# «.sharpsign-quote»		(to "sharpsign-quote")
# «.sharpsign-P»		(to "sharpsign-P")
# «.symbol-function»		(to "symbol-function")
# «.trace»			(to "trace")
# «.warnings»			(to "warnings")
#
# «.asdf»			(to "asdf")
# «.uiop»			(to "uiop")
# «.uiop:run-program»		(to "uiop:run-program")
# «.pprint-logical-block»	(to "pprint-logical-block")
# «.vertical-bars»		(to "vertical-bars")
# «.with-open-file»		(to "with-open-file")
# «.with-output-to-string»	(to "with-output-to-string")
#
# «.irc-channels»		(to "irc-channels")
# «.mailing-lists»		(to "mailing-lists")
# «.practical-common-lisp»	(to "practical-common-lisp")
# «.practical-common-lisp.pdf»	(to "practical-common-lisp.pdf")
# «.seibel-cap02»		(to "seibel-cap02")
# «.cliki»			(to "cliki")
# «.clhs»			(to "clhs")
# «.clhs-debian»		(to "clhs-debian")
# «.clhs-lua»			(to "clhs-lua")
# «.common-lisp-the-language»	(to "common-lisp-the-language")
# «.dpans2texi-2023»		(to "dpans2texi-2023")
# «.dpans2texi»			(to "dpans2texi")
# «.comments»			(to "comments")
# «.sbcl»			(to "sbcl")
# «.sbcl-git»			(to "sbcl-git")
#
# «.slime-2012»			(to "slime-2012")
# «.slime-baringer»		(to "slime-baringer")
# «.slime-from-melpa»		(to "slime-from-melpa")
# «.slime-git»			(to "slime-git")
# «.slime»			(to "slime")
# «.slime-cvs»			(to "slime-cvs")
# «.slime-cvs-run»		(to "slime-cvs-run")
# «.eepitch-slime»		(to "eepitch-slime")
# «.sly»			(to "sly")
#   «.my-sly-wait»		(to "my-sly-wait")
#   «.my-sly-wait-email»	(to "my-sly-wait-email")
# «.sly-teardown»		(to "sly-teardown")
# «.sly-connected-hook»		(to "sly-connected-hook")
# «.sly-git»			(to "sly-git")
# «.sly-from-git»		(to "sly-from-git")
# «.sly-presentations»		(to "sly-presentations")
# «.sly-keymaps»		(to "sly-keymaps")
# «.sly-eval-in-emacs»		(to "sly-eval-in-emacs")
# «.sly-inspector»		(to "sly-inspector")
# «.sly-inspector-email»	(to "sly-inspector-email")
# «.slime-inspector-email»	(to "slime-inspector-email")
# «.slynks-compare»		(to "slynks-compare")
# «.slynk-faster»		(to "slynk-faster")
# «.slime-eval-async»		(to "slime-eval-async")
# «.eepitch-sly-inspect»	(to "eepitch-sly-inspect")
# «.slime-socket»		(to "slime-socket")
# «.sly-hyperspec»		(to "sly-hyperspec")
#
# «.gcl»			(to "gcl")
# «.lazy.lisp»			(to "lazy.lisp")
# «.picolisp»			(to "picolisp")
# «.common-worm»		(to "common-worm")
# «.quicklisp»			(to "quicklisp")
# «.cookbook»			(to "cookbook")
# «.as-powerful-as-possible»	(to "as-powerful-as-possible")
# «.fennel»			(to "fennel")
# «.lisp-games-jam»		(to "lisp-games-jam")
# «.emacs4cl»			(to "emacs4cl")
# «.lexical-binding»		(to "lexical-binding")
# «.iup»			(to "iup")
# «.david-bremner»		(to "david-bremner")
# «.danceball»			(to "danceball")
# «.consfigurator»		(to "consfigurator")
# «.CEPL»			(to "CEPL")
# «.case-sensitivity»		(to "case-sensitivity")
# «.landoflisp»			(to "landoflisp")
# «.sectorlisp»			(to "sectorlisp")
# «.read-comprehension»		(to "read-comprehension")

# «.alexandria»			(to "alexandria")
# «.3d-math»			(to "3d-math")
# «.cffi»			(to "cffi")
# «.cffi.info»			(to "cffi.info")
# «.cffi-lua-email»		(to "cffi-lua-email")
# «.lispbuilder-sdl-gfx»	(to "lispbuilder-sdl-gfx")
#
# «.cl-vs-racket»		(to "cl-vs-racket")
# «.debugging-lisp»		(to "debugging-lisp")
# «.source-registry»		(to "source-registry")
# «.find-try-sly-links»		(to "find-try-sly-links")
# «.sbcl-lua»			(to "sbcl-lua")
# «.lambdalite»			(to "lambdalite")
# «.float-to-int»		(to "float-to-int")
# «.color-values»		(to "color-values")
# «.fancy-brux»			(to "fancy-brux")
# «.eev-quicklisp»		(to "eev-quicklisp")
# «.ixelp»			(to "ixelp")




#####
#
# character
# 2024oct24
#
#####

# «character»  (to ".character")
# (find-fline "~/LOGS/2024oct24.clschool")
# (find-clhsdoc "Body/02_dha" "2.4.8.1 Sharpsign Backslash")
# (find-clhsdoci "code-char")
# (find-clhsdoci "char-code")



#####
#
# declaim
# 2024sep22
#
#####

# «declaim»  (to ".declaim")
# (find-clhsdoci "declaim")



#####
#
# declare
# 2024sep22
#
#####

# «declare»  (to ".declare")
# (find-clhsdoci "declare")



#####
#
# defalias
# 2024sep22
#
#####

# «defalias»  (to ".defalias")
# (find-elnode "Defining Functions" "Function: defalias")
# (find-fline "~/LOGS/2024sep22.clschool" "<zyd> edrx: otherwise https://0x0.st/XYqA.txt")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defun sqr (x) (* x x))
(setf (fdefinition 'mysqr) #'sqr)
(mysqr 10)
(sqr 10)





#####
#
# defclass
# 2024sep18
#
#####

# «defclass»  (to ".defclass")
# (find-es "emacs" "defclass")
# (find-clhsdoci "defclass")
# (find-clhsdoci "make-instance")
# https://lispcookbook.github.io/cl-cookbook/clos.html
# (find-angg "LISP/tostring1.lisp")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defclass mypair () ((a :initarg :a) (b :initarg :b)))
(make-instance 'mypair :a 22 :b 33)
(describe (make-instance 'mypair :a 22 :b 33))
(describe (make-instance 'mypair       :b 33))
(describe (make-instance 'mypair :a 22))
(describe (make-instance 'mypair))
(with-slots ((aa a) (bb b)) (make-instance 'mypair :a 22 :b 33) (list aa bb))
(with-slots ((aa a) (bb b)) (make-instance 'mypair       :b 33) (list aa bb)) ; err

(defclass mypair ()
  ((a :initarg :a :initform nil)
   (b :initarg :b :initform nil)))

(defun mkmypair (aa bb) (make-instance 'mypair :a aa :b bb))

(defvar ab)
(setq ab (mkmypair 22 33))
(setq ab (mkmypair 222 333))
(slot-value ab 'a)

(with-slots (a b) ab (list a b))

(with-slots (a b) ab (format nil "~a_~a" a b))

(defmethod print-object ((p mypair) stream)
  (princ (pr obj) stream))




#####
#
# defmacro
# 2024sep22
#
#####

# «defmacro»  (to ".defmacro")
# (find-clhsdoci "defmacro")




#####
#
# defmacro-ignorable
# 2024sep22
#
#####

# «defmacro-ignorable»  (to ".defmacro-ignorable")
# (find-fline "~/LOGS/2024sep22.clschool" "(ignorable ,a b c d)")
# (ee-copy-rest-3m nil ";;-- end" "/tmp/o.lisp")

(defmacro foo (a &rest body)
  `(let* ((a ,a)
	  (b (+ ,a 20))
	  (c (+ b 300))
	  (d (+ c 4000)))
     (declare (ignorable a b c d))
     ,@body))

#|
* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(load "o.lisp")
(foo 1 d)
(foo 1 (list a b c d))

|#

;;-- end







#####
#
# defmethod
# 2024sep18
#
#####

# «defmethod»  (to ".defmethod")
# (find-clhsdoci "defmethod")
# (find-clhsdoci "print-object")
# (find-clhsdoc "Body/07_fb" "7.6.2 Introduction to Methods")
# (find-fline "~/LOGS/2024sep18.clschool2")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)

(defclass mypair ()
  ((a :initarg :a :initform nil)
   (b :initarg :b :initform nil)))

(defun mkmypair (aa bb) (make-instance 'mypair :a aa :b bb))

(defmethod print-object ((p mypair) stream)
  (with-slots (a b) p (format stream "~a_~a" a b)))

(mkmypair 22 33)   ; -> 22_33



#####
#
# defvar
# 2024oct02
#
#####

# «defvar»  (to ".defvar")
# (find-clhsdoci "defvar")
# (find-clhsdoci "defparameter")
# (find-clhsdoci "special")




#####
#
# describe
# 2024sep03
#
#####

# «describe»  (to ".describe")
# (find-clhsdoci "describe")
# (find-sbcl-links 'describe)
# (find-sbclfile "src/code/describe.lisp")
# (find-sbclfile "src/code/describe.lisp" "(defun describe-function-source ")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defun myfoo (a b) (+ a b))
(describe 'myfoo)
(sb-impl:describe-function-source     'myfoo nil)
(sb-impl::describe-function-source    'myfoo nil)
(sb-impl::describe-function-source   #'myfoo nil)
(disassemble  'myfoo)
(sb-impl:describe-function-source-foo 'myfoo nil)



#####
#
# destructuring-bind
# 2024sep21
#
#####

# «destructuring-bind»  (to ".destructuring-bind")
# (find-clhsdoci   "destructuring-bind")
# (find-sbcl-links "destructuring-bind")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(destructuring-bind (a b c) '(1 2 3) (list c b a))



#####
#
# eval-when
# 2024oct24
#
#####

# «eval-when»  (to ".eval-when")
# https://novaspec.org/cl/f_eval-when
# (find-clhsdoci "eval-when")
# (find-fline "~/LOGS/2024oct24.clschool2")
# (find-fline "~/LOGS/2024oct28.clschool" "'(and) '(or)")
# (find-angg "MAXIMA/when-maxima.lisp")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(apropos "eval-when")
(apropos "toplevel")




#####
#
# flet
# 2024sep22
#
#####

# «flet»  (to ".flet")
# (find-sbcl-links '"flet")
# (find-clhsdoci "flet")
# (find-es "emacs" "cl-flet")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(flet ((f (n) (+ 2 n))
       (g (n) (* 10 n)))
  (g (f 1)))

(flet ((flet1 (n) (+ n n)))
   (flet ((flet1 (n) (+ 2 (flet1 n))))
     (flet1 2)))    ;=>  6




#####
#
# format
# 2022aug06
#
#####

# «format»  (to ".format")
# (find-es "maxima" "format")
# (find-clhsdoci "format")
# file:///usr/share/doc/hyperspec/Body/22_c.htm
# (find-fline "~/LOGS/2022aug06.clschool" "print-right-margin")
# (find-books "__comp/__comp.el" "seibel" "310" "18. A Few FORMAT Recipes")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(format t   "::~S~%::" '(1 "2" "3 4"))
(format nil "::~S~%::" '(1 "2" "3 4"))

(dolist (a '(1 "22" (33 "44")))
  (format t "::~S~%:" a))




#####
#
# format-recipes
# 2022may15
#
#####

# «format-recipes»  (to ".format-recipes")
# (find-clhsdoci "format")
# https://gigamonkeys.com/book/a-few-format-recipes.html
# (find-books "__comp/__comp.el" "seibel" "310" "18. A Few FORMAT Recipes")
# (find-practiclpage 310 "18. A Few FORMAT Recipes")
# (find-practicltext 310 "18. A Few FORMAT Recipes")
# (find-practiclpage 319 "Floating-Point Directives")
# (find-practicltext 319 "Floating-Point Directives")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(format t "~{~a~^, ~}" '(22 33 "aa"))
(format t "~$" pi)
(format t "~5$" pi)
(format t "~v$" 3 pi)
(format t "~#$" pi)
(format t "~,5f" pi)
(format t "~d" 1000000)
(format t "~:d" 1000000)
(format t "~@d" 1000000)
(format t "~:@d" 1000000)
(format nil "The value is: ~a" 10)
(format nil "The value is: ~a" "foo")
(format nil "The value is: ~a" (list 1 2 3))
(format t "Syntax error. Unexpected character: ~:c" char)
(format t "Syntax error. Unexpected character: ~:c" #\a)
(format t "Syntax error. Unexpected character: ~:c" #\ )
(format t "~@c~%" #\a)

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(format nil "~:@c" (code-char 0)) ;=> "^@ (Control @)"
(format nil "~d" 1000000)     	  ;=> "1000000"
(format nil "~:d" 1000000) 	  ;=> "1,000,000"
(format nil "~@d" 1000000) 	  ;=> "+1000000"
(format nil "~:@d" 1000000) 	  ;=> "+1,000,000"
(format nil "~12d" 1000000)    	  ;=> "     1000000"
(format nil "~12,'0d" 1000000) 	  ;=> "000001000000"
(format nil "~4,'0d-~2,'0d-~2,'0d" 2005 6 10) ;=> "2005-06-10"
(format nil "~:d" 100000000)       ;=> "100,000,000"
(format nil "~,,'.,4:d" 100000000) ;=> "1.0000.0000"
(format nil "~x" 1000000) 	   ;=> "f4240"
(format nil "~o" 1000000) 	   ;=> "3641100"
(format nil "~b" 1000000) 	   ;=> "11110100001001000000"
(format nil "~f" pi)      	   ;=>   "3.141592653589793d0"
(format nil "~,4f" pi)    	   ;=>   "3.1416"
(format nil "~e" pi)      	   ;=>   "3.141592653589793d+0"
(format nil "~,4e" pi)    	   ;=>   "3.1416d+0"
(format nil "~$" pi)      	   ;=> "3.14"
(format nil "~2,4$" pi)   	   ;=> "0003.14"
(format nil "~r" 1234) 	  	   ;=> "one thousand two hundred thirty-four"
(format nil "~:r" 1234)   	   ;=> "one thousand two hundred thirty-fourth"
(format nil "~@r" 1234)   	   ;=> "MCCXXXIV"
(format nil "~:@r" 1234)  	   ;=> "MCCXXXIIII"
(format nil "file~p" 1)   	   ;=> "file"
(format nil "file~p" 10)  	   ;=> "files"
(format nil "file~p" 0)   	   ;=> "files"
(format nil "~r file~:p" 1)    	   ;=> "one file"
(format nil "~r file~:p" 10)   	   ;=> "ten files"
(format nil "~r file~:p" 0)    	   ;=> "zero files"
(format nil "~r famil~:@p" 1)  	   ;=> "one family"
(format nil "~r famil~:@p" 10) 	   ;=> "ten families"
(format nil "~r famil~:@p" 0)  	   ;=> "zero families"
(format nil "~(~a~)" "FOO")    	   ;=> "foo"
(format nil "~(~@r~)" 124)     	   ;=> "cxxiv"
(format nil "~(~a~)" "tHe Quick BROWN foX")        ;=>   "the     quick   brown   fox"
(format nil "~@(~a~)" "tHe Quick BROWN foX")       ;=>   "The     quick   brown   fox"
(format nil "~:(~a~)" "tHe Quick BROWN foX")       ;=>   "The     Quick   Brown   Fox"
(format nil "~:@(~a~)" "tHe Quick BROWN foX")      ;=>   "THE     QUICK   BROWN   FOX"
(format nil "~[cero~;uno~;dos~]" 0) ;=> "cero"
(format nil "~[cero~;uno~;dos~]" 1) ;=> "uno"
(format nil "~[cero~;uno~;dos~]" 2) ;=> "dos"
(format nil "~[cero~;uno~;dos~]" 3) ;=> ""
(format nil "~[cero~;uno~;dos~:;mucho~]" 3)   ;=> "mucho"
(format nil "~[cero~;uno~;dos~:;mucho~]" 100) ;=> "mucho"

       (defparameter *list-etc*
         "~#[NONE~;~a~;~a and ~a~:;~a, ~a~]~#[~; and ~a~:;, ~a, etc~].")
       (format      nil   *list-etc*)                    ;=>   "NONE."
       (format      nil   *list-etc* 'a)                 ;=>   "A."
       (format      nil   *list-etc* 'a 'b)              ;=>   "A and B."
       (format      nil   *list-etc* 'a 'b 'c)           ;=>   "A, B and C."
       (format      nil   *list-etc* 'a 'b 'c 'd)        ;=>   "A, B, C, etc."
       (format      nil   *list-etc* 'a 'b 'c 'd 'e)     ;=>   "A, B, C, etc."
       (format t "~:[FAIL~;pass~]" test-result)
       (format nil "~@[x = ~a ~]~@[y = ~a~]" 10 20)      ;=> "x = 10 y = 20"
       (format nil "~@[x = ~a ~]~@[y = ~a~]" 10 nil)     ;=> "x = 10 "
       (format nil "~@[x = ~a ~]~@[y = ~a~]" nil 20)     ;=> "y = 20"
       (format nil "~@[x = ~a ~]~@[y = ~a~]" nil nil) 	 ;=> ""
       (format nil "~{~a, ~}" (list 1 2 3))  	 	 ;=> "1, 2, 3, "
       (format nil "~{~a~^, ~}" (list 1 2 3)) 	 	 ;=> "1, 2, 3"
       (format nil "~@{~a~^, ~}" 1 2 3)   		 ;=> "1, 2, 3"
       (format nil "~{~a~#[~;, and ~:;, ~]~}" (list 1 2 3)) ;=> "1, 2, and 3"
       (format nil "~{~a~#[~;, and ~:;, ~]~}" (list 1 2)) ;=> "1, and 2"

       (defparameter *english-list*
         "~{~#[~;~a~;~a and ~a~:;~@{~a~#[~;, and ~:;, ~]~}~]~}")

       (format      nil   *english-list*      '())          ;=>   ""
       (format      nil   *english-list*      '(1))         ;=>   "1"
       (format      nil   *english-list*      '(1 2))       ;=>   "1 and 2"
       (format      nil   *english-list*      '(1 2 3))     ;=>   "1, 2, and 3"
       (format      nil   *english-list*      '(1 2 3 4))   ;=>   "1, 2, 3, and 4"

       (defparameter *english-list*
         "~{~#[<empty>~;~a~;~a and ~a~:;~@{~a~#[~;, and ~:;, ~]~}~]~:}")

       (format nil *english-list* '()) ;=> "<empty>"

       (format nil "~r ~:*(~d)" 1) ;=> "one (1)"
       (format nil "I saw ~r el~:*~[ves~;f~:;ves~]." 0) ;=> "I saw zero elves."
       (format nil "I saw ~r el~:*~[ves~;f~:;ves~]." 1) ;=> "I saw one elf."
       (format nil "I saw ~r el~:*~[ves~;f~:;ves~]." 2) ;=> "I saw two elves."
       (format nil "~{~s~*~^ ~}" '(:a 10 :b 20)) ;=> ":A :B"




#####
#
# get
# 2023oct08
#
#####

# «get»  (to ".get")
# (find-clhsdoci "get")
# (find-clhsdoci "symbol-plist")
# (find-clhsdoc "Body/26_glo_p#property")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defvar sym)
(setq sym (gensym))            ; =>  #:G9723
(symbol-plist sym)             ; =>  ()
(setf (get sym 'prop1) 'val1)  ; =>  VAL1
(symbol-plist sym)             ; =>  (PROP1 VAL1)
(setf (get sym 'prop2) 'val2)  ; =>  VAL2
(symbol-plist sym)             ; =>  (PROP2 VAL2 PROP1 VAL1)
(setf (symbol-plist sym) (list 'prop3 'val3)) ; =>  (PROP3 VAL3)
(symbol-plist sym)             ; =>  (PROP3 VAL3)





#####
#
# getenv
# 2023jan11
#
#####

# «getenv»  (to ".getenv")
# (find-fline "~/LOGS/2023jan11.emacs" "sb-posix:getenv")
# (find-sbclfile "src/code/filesys.lisp" "(defun probe-file ")
# (find-sbcl-links 'getenv)
# (find-sbcl-links 'sb-posix:getenv)

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(getenv "HOME")
(sb-posix:getenv "HOME")
(require 'sb-posix)
(sb-posix:getenv "HOME")
(describe     'sb-posix:getenv)
(symbol-plist 'sb-posix:getenv)

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
;; (find-sbclfile "contrib/sb-posix/interface.lisp" "(defun getenv ")
(sb-posix:getenv "S")
(probe-file "~/")

https://riptutorial.com/common-lisp ***

sbcl
sb-posix:getenv




#####
#
# iterate
# 2022nov15
#
#####

# «iterate»  (to ".iterate")
# (find-fline "~/LOGS/2022nov15.emacs2" "<twb> fsbot: ITERATE")
# (find-books "__comp/__comp.el" "seibel" "390" "22. LOOP for Black Belts")
# https://gigamonkeys.com/book/loop-for-black-belts.html
# https://iterate.common-lisp.dev/
# https://iterate.common-lisp.dev/doc/Don_0027t-Loop-Iterate.html
# https://iterate.common-lisp.dev/doc/Introduction.html




#####
#
# letf
# 2024sep11
#
#####

# «letf»  (to ".letf")
# https://clisp.sourceforge.io/impnotes.html#letf
# (find-fline "~/LOGS/2024sep11.clschool" "<bike> it is called letf")



#####
#
# loop
# 2024oct23
#
#####

# «loop»  (to ".loop")
# (find-es "emacs" "cl-loop")
# (find-clhsdoci "loop")
# (find-books "__comp/__comp.el" "seibel" "115" "7. Macros: Standard Control")
# (find-books "__comp/__comp.el" "seibel" "390" "22. LOOP for Black Belts")
# (find-practiclpage 115 "7. Macros: Standard Control")
# (find-practicltext 115 "7. Macros: Standard Control")
# (find-practiclpage 125 "The Mighty LOOP")
# (find-practicltext 125 "The Mighty LOOP")
# (find-practiclpage 390 "22. LOOP for Black Belts")
# (find-practicltext 390 "22. LOOP for Black Belts")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defvar as)
(setq as '("x" "y" "z"))
(loop for a in as
      collect 2
      collect a)
(loop for a in as
      append a)





#####
#
# make-array
# 2024sep22
#
#####

# «make-array»  (to ".make-array")
# (find-clhsdoci "make-array")
# (find-fline "~/LOGS/2024sep21.clschool" "make-array")



#####
#
# make-string
# 2024oct24
#
#####

# «make-string»  (to ".make-string")
# (find-clhsdoci "make-string")




#####
#
# map
# 2024sep21
#
#####

# «map»  (to ".map")
# (find-clhsdoci "map")
# (find-sbcl-links "map")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(map 'vector #'+
     (vector 4 5 6)
     (vector 10 20 30))
(map 'vector #'(lambda (x y) (+ x (* y 10)))
     (vector 1 2 3) (vector 4 5 6))

(map 'vector #'(lambda (x y) (+ x (* y 10)))
     (vector 1 2 3) (vector 4 5 6))
(map 'vector #'(lambda (x y) (+ x (* y 10)))
     #(1 2 3) #(4 5 6))



#####
#
# mapconcat
# 2024oct23
#
#####

# «mapconcat»  (to ".mapconcat")
# (find-clhsdoci "concatenate")
# (find-fline "~/LOGS/2024oct23.clschool")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defun f (a) (format nil "[~a]" a))

(defun mapconcat (f as sep)
  (if (eq () as) ""
      (let* ((bs  (map 'list f as))
	     (sbs (loop for b in (cdr bs)
			collect sep
			collect b))
	     (bsbs (cons (car bs) sbs)))
	(apply 'concatenate 'string bsbs))))
	     
(mapconcat #'f '("a" "b" "c") "_")
(mapconcat #'f '("a" "b" "c") #\newline)
(mapconcat #'f '("a" "b" "c") "\n")




#####
#
# multiple-value-bind
# 2024sep21
#
#####

# «multiple-value-bind»  (to ".multiple-value-bind")
# (find-clhsdoci "multiple-value-bind")
# (find-clhsdoci "values")
# (find-clhsdoci "values-list")
# (find-books "__comp/__comp.el" "seibel" "Multiple Values")
# (to "float-to-int")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(values-list nil)      ;=>  <no values>
(values-list '(1))     ;=>  1
(values-list '(1 2))   ;=>  1, 2
(values-list '(1 2 3)) ;=>  1, 2, 3
(equal '(1 2 3) (multiple-value-list (values-list '(1 2 3))))




#####
#
# newline
# 2024oct23
#
#####

# «newline»  (to ".newline")
# (find-practiclpage  35 "~%" "tells FORMAT to emit a newline")
# (find-practicltext  35 "~%" "tells FORMAT to emit a newline")
# (find-practiclpage 175 "Space and Newline")
# (find-practicltext 175 "Space and Newline")
# (find-practiclpage 251 "#\\Newline")
# (find-practicltext 251 "#\\Newline")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(format nil "~c" #\Newline)





#####
#
# in-package
# 2022oct04
#
#####

# «packages»  (to ".packages")
# «in-package»  (to ".in-package")
# (find-clhsdoci "defpackage")
# (find-clhsdoci "in-package")
# (find-clhsdoci "find-package")
# (find-clhsdoci "*packages*")
# (find-practiclpage 370 "21. Programming in the Large:" "Packages and Symbols")
# (find-practicltext 370 "21. Programming in the Large:" "Packages and Symbols")
# (find-books "__comp/__comp.el" "seibel" "Packages and Symbols")
# https://gigamonkeys.com/book/programming-in-the-large-packages-and-symbols.html
# (find-sbclfile "src/code/package.lisp")
# (find-sbclfile "src/code/package.lisp" ";;;; IN-PACKAGE")
# (find-sbclgrep "grep --color=auto -niRH --null -e package *")
# (find-sbclgrep "grep --color=auto -niRH --null -e package-names *")
# (find-sbclgrep "grep --color=auto -niRH --null -e defpackage *")
# (find-sbclgrep "grep --color=auto -niRH --null -e current-package *")
# (find-sbclgrep "grep --color=auto -niRH --null -e common-lisp *")
# (find-maximagitgrep "grep --color=auto -niRH --null -e defpackage *")
# (find-qlgrep "grep --color=auto -niRH --null -e defpackage *")

<pjb> edrx: go to #clschool ! http://cliki.net/Online+Tutorial
      "MAXIMA" is the name of the current package (variable
      *package*) You can change it with (in-package "CL-USER") for
      example. But since you're working with maxima, you'll
      probably want to stay in the maxima package.

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
*package*
common-lisp:*package*

'in-package
(describe 'package)
(describe 'in-package)
(describe *package-names*)

(describe '*package*)
(describe  *package*)
common-lisp-user

* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
to_lisp();
  *package*
  (describe  *package*)
  (find-package "maxima")
  (find-package "MAXIMA")
  (describe  :maxima)
  (packagep  *package*)
  (packagep  :maxima)
  (packagep  "MAXIMA")




#####
#
# *features*
# 2023jan09
#
#####

# «features»  (to ".features")
# (find-fline "~/LOGS/2023jan09.emacs" "member :asdf *features*")
# https://gigamonkeys.com/book/practical-a-portable-pathname-library.html

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
*features*
(describe '*features*)



#####
#
# read
# 2024sep21
#
#####

# «read»  (to ".read")
# (find-sbcl-links 'read)
# (read "#x40")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(read-from-string "#x40")
(parse-integer "#x40" :start 2 :radix 16)



#####
#
# require
# 2024sep02
#
#####

# «require»  (to ".require")
# (find-clhsdoci "require")
# (find-sbcl-links 'require)
# (find-sh "locate module.lisp")
# (find-sbclfile "src/code/module.lisp")



#####
#
# delete-package
# 2024sep21
#
#####

# «delete-package»  (to ".delete-package")
# (find-clhsdoci "find-package")
# (find-clhsdoci "delete-package")
# (find-clhsdoci "package-use-list")
# (find-efunction 'sly-delete-package)

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
*package*
(package-use-list *package*)
(describe 'package)
(find-package "COMMON-LISP-USER")
(find-package 'Common-lisp-user)
(find-package 'CL-USER)

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
*package*
(package-use-list *package*)

(defpackage :p1 (:use :common-lisp))
(in-package :p1)
(defvar foo)

(delete-package :p1)



#####
#
# reduce
# 2022sep03
#
#####

# «reduce»  (to ".reduce")
# (find-fline "~/LOGS/2022jul31.emacs" "reduce")
# (clhs-doc "reduce")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(describe #'reduce)
(reduce (lambda (a b) (format nil "~a_~a"  a b)) '(2 3 42))
(reduce (lambda (a b) (format nil "~a~%~a" a b)) '(2 3 42))



#####
#
# repl-prompt
# 2024sep21
#
#####

# «repl-prompt»  (to ".repl-prompt")
# (find-fline "~/LOGS/2024sep21.clschool" "sly's prompt")
# (find-sbcl-links "prompt")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(apropos "prompt")
(sb-impl::repl-prompt-fun nil)
(sb-impl::repl-prompt-fun t)




#####
#
# sharpsign-dot
# 2024oct28
#
#####

# «sharpsign-dot»  (to ".sharpsign-dot")
# (find-clhsdoc "Body/02_dhf" "2.4.8.6 Sharpsign Dot")
# (find-fline "~/LOGS/2024oct28.clschool" "#+#.(cl:if")






#####
#
# The "#-" in the "#-quicklisp" in ~/.sbclrc
# 2023jan11
#
#####

# «sharpsign-minus»  (to ".sharpsign-minus")
# «sharpsign-plus»  (to ".sharpsign-plus")
# (find-books "__comp/__comp.el" "seibel" "256" "#+ and #-")
# (find-fline "~/LOGS/2023jan11.clschool")
# (find-fline "~/LOGS/2023jan11.clschool" "CLHS: Section 2.4.8.18")
# (find-fline "~/LOGS/2023jan11.emacs" "show the expansion of #-quicklisp (foo)?")
# (find-clhsdoc "Body/02_dh"  "2.4.8 Sharpsign")
# (find-clhsdoc "Body/02_dhq" "2.4.8.17 Sharpsign Plus")
# (find-clhsdoc "Body/02_dhr" "2.4.8.18 Sharpsign Minus")
# (find-sbclfile "src/code/sharpm.lisp")
# (find-sbclfile "src/code/sharpm.lisp" "(defun sharp-plus-minus")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(get-dispatch-macro-character #\# #\-)
(get-dispatch-macro-character #\# #\')





#####
#
# The difference between "#'" and "'"
# 2024sep03
#
#####

# «sharpsign-quote»  (to ".sharpsign-quote")
# (find-clhsdoc "Body/02_dhb" "2.4.8.2 Sharpsign Single-Quote")
# (find-sbcl-links 'sharp-quote)
# (find-sbclfile "src/code/sharpm.lisp" "(defun sharp-quote ")
# (find-fline "~/LOGS/2024sep03.lisp" "#'myfoo returns the actual function")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defun myfoo (a b) (+ a b))
(describe 'myfoo)
(sb-impl:describe-function-source   'myfoo nil)
(sb-impl::describe-function-source  'myfoo nil)
(sb-impl::describe-function-source #'myfoo nil)




#####
#
# sharpsign-P
# 2023jan12
#
#####

# «sharpsign-P»  (to ".sharpsign-P")
# (find-clhsdoc "Body/02_dhf" "2.4.8.6 Sharpsign Dot")
# (find-clhsdoc "Body/02_dhn" "2.4.8.14 Sharpsign P")
# https://gigamonkeys.com/book/practical-a-portable-pathname-library.html
# (find-sbclfile "src/code/target-pathname.lisp" "(defun make-pathname ")
# (find-sbclfile "src/code/sharpm.lisp" "(defun sharp-P ")
# (find-sbclfile "src/code/inspect.lisp" "(defun inspect ")
# (find-sbclfile "src/code/pathname.lisp" "(defstruct (pathname ")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(defvar p)
(setq p #P"~/bigsrc/maxima/src/")
p
'make-pathname

;; (find-fline "~/LOGS/2023jan12.clschool" "defstructs are not")
;; (find-fline "~/LOGS/2023jan12.clschool" "with vectors")
(fboundp 'make-pathname)
(apropos "PATHNAME-" "CL")
(apropos "PATHNAME")
(apropos "MAKE-PATHNAME")
(make-pathname :name "FOO")
(inspect (make-pathname :name "FOO"))
(inspect (cons 'a 'd))
(vectorp p)
(listp p)
(structp p)
(structurep p)
(pathnamep p)
(describe p)

(macroexpand '(defstruct mypoint x y))

# (find-anggfile "LOGS/2023jan09.emacs" "Common Lisp doesn't really have a load-path")




#####
#
# symbol-function
# 2024sep11
#
#####

# «symbol-function»  (to ".symbol-function")
# (find-clhsdoci "symbol-function")
# (find-elisp-intro "6. Defining functions")
# (find-elisp-intro "6. Defining functions" "symbol-function")




#####
#
# trace
# 2023jan14
#
#####

# «trace»  (to ".trace")
# (to "eepitch-sly-inspect")
# (find-es "maxima" "lisp-trace")
# (find-es "maxima" "lisp-trace-meval")
# https://ccl.clozure.com/manual/chapter4.2.html#Trace
# (find-clhsdoci "trace")
# (find-clhsdoc "Body/m_tracec" "Macro TRACE, UNTRACE")
# (find-fline "~/LOGS/2023jan13.clschool" "(untrace <function-name>)")
# (find-sbclfile "src/code/ntrace.lisp" "(defmacro trace ")
# (find-sbclfile "src/code/ntrace.lisp" "(defmacro untrace ")
# (find-sbclnode "Debugger")
# (find-sbclnode "Function Tracing")
# (find-sbclnode "Function Tracing" "Macro: trace")

# (find-sbclfile "src/code/eval.lisp" "(defun eval-in-lexenv ")
# (find-sbclfile "src/code/eval.lisp" "(defun simple-eval-in-lexenv ")
# (find-slynkfile "slynk.lisp" "(defmacro destructure-case ")
# (find-slynkfile "slynk.lisp" "(defslyfun eval-for-inspector ")
# (find-slynkfile "slynk.lisp" "(defun debug-in-emacs ")
# (find-slynkfile "slynk.lisp" "(defun eval-for-emacs ")
# (find-slynkfile "slynk.lisp" "(defun invoke-sly-debugger ")
# (find-slynkfile "slynk.lisp" "(defun process-requests ")
# (find-slynkfile "slynk.lisp" "(defvar-unbound *buffer-package*")
# (find-slyfile "sly.el" "(defun sly-inspect ")
# (find-slyfile "sly.el" "(cl-defun sly-eval-for-inspector ")
# (find-slyfile "sly.el" "(defun sly-eval-async ")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(defvar o nil)
(setq o '(20 30))
* (eepitch-sly-inspect "o")
*
* (defun at-o (sexp) (eek "M-o") (eval sexp))
** (at-o '(sly-eval-for-inspector '(slynk:init-inspector "o") :inspector-name nil))
** (at-o '(sly-eval-for-inspector '(slynk:init-inspector "o")))

  (sly-eval-for-inspector '(slynk:init-inspector "o") :inspector-name nil)
  (sly-eval-for-inspector '(slynk:init-inspector "o"))

* (debug-on-entry        'sly-eval-async)
* (eepitch-sly-inspect "o")
* (cancel-debug-on-entry 'sly-eval-async)
(slynk:eval-for-inspector nil nil 'slynk:init-inspector "o")

(load "sly.el")

* sly-eval-async((slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") #f(compiled-function (results) #<bytecode 0x52ea19879a585ac>))

* sly-eval-async((slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") (closure ((pos) (opener) (inspector-name) (save-selected-window) (restore-point) (error-message . "Couldn't inspect")) (results) (let ((opener #'(lambda nil (sly--open-inspector results :point ... :inspector-name inspector-name :switch ...)))) (cond (results (funcall opener)) (t (sly-message error-message))))))

sly-eval-async


'slynk::debug-in-emacs
'slynk:invoke-sly-debugger


 2: (SLYNK::DEBUG-IN-EMACS #<SIMPLE-CONDITION "breaking ~A traced call to ~S:" {1005849D93}>)
 3: (SLYNK:INVOKE-SLY-DEBUGGER #<SIMPLE-CONDITION "breaking ~A traced call to ~S:" {1005849D93}>)


(trace   slynk:eval-for-inspector :break t)
(untrace slynk:eval-for-inspector)
(trace   slynk:eval-for-emacs :break t)
(untrace slynk:eval-for-emacs)


'SLYNK:EVAL-FOR-INSPECTOR
(apropos "trace")
(apropos "eval-for-inspector")
(apropos "eval-for-emacs")

(trace <function-name> :break t)
(untrace <function-name>)


(trace   'eval-for-inspector :break t)



(defmacro deflsyfun ...) is defined here:
https://github.com/joaotavora/sly/blob/master/slynk/slynk.lisp#L149

 0: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SLYNK:EVAL-FOR-INSPECTOR NIL NIL (QUOTE SLYNK:INIT-INSPECTOR) "o") #<NULL-LEXENV>)
 1: (EVAL (SLYNK:EVAL-FOR-INSPECTOR NIL NIL (QUOTE SLYNK:INIT-INSPECTOR) "o"))

 0: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SLYNK:EVAL-FOR-INSPECTOR NIL NIL (QUOTE SLYNK:INIT-INSPECTOR) "o") #<NULL-LEXENV>)
(SLYNK:EVAL-FOR-INSPECTOR NIL NIL (QUOTE SLYNK:INIT-INSPECTOR) "o"))

(sb-int:simple-eval-in-lexenv (slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") #<NULL-LEXENV>)
(sb-int:simple-eval-in-lexenv (slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") (make-null-lexenv))
(sb-int:simple-eval-in-lexenv '(slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") (make-null-lexenv))
(sb-int:simple-eval-in-lexenv '(slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") (sb-kernel:make-null-lexenv))
(sb-int:simple-eval-in-lexenv (slynk:eval-for-inspector nil nil 'slynk:init-inspector "o") (sb-kernel:make-null-lexenv))
(slynk:eval-for-inspector nil nil 'slynk:init-inspector "o")
*buffer-package*
(apropos "*buffer-package*")

'slynk:eval-for-inspector
'sb-int:simple-eval-in-lexenv

(trace :eval-before (break) slynk:eval-for-inspector)



#####
#
# warnings
# 2024sep22
#
#####

# «warnings»  (to ".warnings")
# https://stackoverflow.com/questions/2535478/how-do-i-disable-warnings-in-lisp-sbcl
# (find-sbclnode "Controlling Verbosity")




#####
#
# irc-channels
# 2024sep03
#
#####

# «irc-channels»  (to ".irc-channels")
# (find-fline "~/LOGS/2024sep03.lisp" "#commonlisp and #clschool")



#####
#
# mailing-lists
# 2023jan15
#
#####

# «mailing-lists»  (to ".mailing-lists")
# https://mailman.common-lisp.net/listinfo/slime-devel
# https://mailman.common-lisp.net/pipermail/slime-devel/ archives



#####
#
# practical-common-lisp
# 2023jan10
#
#####

# «practical-common-lisp»  (to ".practical-common-lisp")
# (find-books "__comp/__comp.el" "seibel")
# https://gigamonkeys.com/book/
# https://gigamonkeys.com/book/practicals-1.0.3.tar.gz
# https://en.wikipedia.org/wiki/Practical_Common_Lisp
# https://gigamonkeys.com/book/introduction-why-lisp.html
# https://gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.html
# https://gigamonkeys.com/book/practical-a-portable-pathname-library.html
# https://news.ycombinator.com/item?id=13096576 Practical Common Lisp (2005) (gigamonkeys.com)
# https://news.ycombinator.com/item?id=17644067 Practical Common Lisp (2009) (gigamonkeys.com)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv ~/usrc/practicals-1.0.3/
tar -C ~/usrc/ -xvzf \
  $S/https/gigamonkeys.com/book/practicals-1.0.3.tar.gz
cd     ~/usrc/practicals-1.0.3/

# (code-c-d "seibel" "~/usrc/practicals-1.0.3/")
# (find-seibelfile "")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(defun hello-world ()
  (format t "Hello, world!"))

(hello-world)
(hello-woorld)
ab

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)




#####
#
# Converting Seibel's "Practical Common Lisp" from many HTMLs to a aingle PDF
# 2024sep03
#
#####

# «practical-common-lisp.pdf»  (to ".practical-common-lisp.pdf")
# (find-books "__comp/__comp.el" "seibel")
# (find-lynx "https://gigamonkeys.com/book/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/gigamonkeys/")
rm -Rv /tmp/gigamonkeys/
mkdir  /tmp/gigamonkeys/
cd     /tmp/gigamonkeys/

cat > /tmp/print.css <<'%%%'
  body { font-size: 12pt }
  @page { @bottom-center { content: counter(page); } }
%%%

ECHO="echo"
ECHO=""
rm -fv urls

f () { $ECHO prince -s /tmp/print.css -o /tmp/gigamonkeys/$1.pdf $2; }
f () { echo $2 >> urls; }

{
f 00 https://gigamonkeys.com/book/
f 01 https://gigamonkeys.com/book/introduction-why-lisp
f 02 https://gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl
f 03 https://gigamonkeys.com/book/practical-a-simple-database
f 04 https://gigamonkeys.com/book/syntax-and-semantics
f 05 https://gigamonkeys.com/book/functions
f 06 https://gigamonkeys.com/book/variables
f 07 https://gigamonkeys.com/book/macros-standard-control-constructs
f 08 https://gigamonkeys.com/book/macros-defining-your-own
f 09 https://gigamonkeys.com/book/practical-building-a-unit-test-framework
f 10 https://gigamonkeys.com/book/numbers-characters-and-strings
f 11 https://gigamonkeys.com/book/collections
f 12 https://gigamonkeys.com/book/they-called-it-lisp-for-a-reason-list-processing
f 13 https://gigamonkeys.com/book/beyond-lists-other-uses-for-cons-cells
f 14 https://gigamonkeys.com/book/files-and-file-io
f 15 https://gigamonkeys.com/book/practical-a-portable-pathname-library
f 16 https://gigamonkeys.com/book/object-reorientation-generic-functions
f 17 https://gigamonkeys.com/book/object-reorientation-classes
f 18 https://gigamonkeys.com/book/a-few-format-recipes
f 19 https://gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts
f 20 https://gigamonkeys.com/book/the-special-operators
f 21 https://gigamonkeys.com/book/programming-in-the-large-packages-and-symbols
f 22 https://gigamonkeys.com/book/loop-for-black-belts
f 23 https://gigamonkeys.com/book/practical-a-spam-filter
f 24 https://gigamonkeys.com/book/practical-parsing-binary-files
f 25 https://gigamonkeys.com/book/practical-an-id3-parser
f 26 https://gigamonkeys.com/book/practical-web-programming-with-allegroserve
f 27 https://gigamonkeys.com/book/practical-an-mp3-database
f 28 https://gigamonkeys.com/book/practical-a-shoutcast-server
f 29 https://gigamonkeys.com/book/practical-an-mp3-browser
f 30 https://gigamonkeys.com/book/practical-an-html-generation-library-the-interpreter
f 31 https://gigamonkeys.com/book/practical-an-html-generation-library-the-compiler
f 32 https://gigamonkeys.com/book/conclusion-whats-next
}

# (find-fline "/tmp/gigamonkeys/")
prince -s /tmp/print.css \
  -o /tmp/gigamonkeys/seibel__practical_common_lisp.pdf \
  $(cat urls);

# (find-es "ps" "qpdf-merge")

cd /tmp/gigamonkeys/
laf
qpdf --empty --pages $(for i in ??.pdf; do echo $i 1-z; done) \
     -- \
     seibel__practical_common_lisp.pdf
laf

# (find-fline "/tmp/gigamonkeys/" "seibel__practical_common_lisp.pdf")
# (find-pdf-page "/tmp/gigamonkeys/seibel__practical_common_lisp.pdf")
# (find-pdf-text "/tmp/gigamonkeys/seibel__practical_common_lisp.pdf")




#####
#
# seibel-cap02
# 2023jan12
#
#####

# «seibel-cap02»  (to ".seibel-cap02")
# https://gigamonkeys.com/book/
# https://gigamonkeys.com/book/practical-a-simple-database.html
# (find-angg "LISP/seibel-02.lisp")
# (find-angg "LISP/seibel-03.lisp")
# (find-angg "LISP/seibel-04.lisp")
# (find-angg "LISP/seibel-05.lisp")
# (find-angg "LISP/seibel-06.lisp")




#####
#
# cliki
# 2022aug25
#
#####

# «cliki»  (to ".cliki")
# https://cliki.net/Online+Tutorial
# https://cliki.net/TutorialClispDebugger
# https://clisp.sourceforge.io/impnotes/debugger.html
# https://www.cliki.net/index

https://learnxinyminutes.com/docs/common-lisp/
https://makimo.pl/blog/2019/05/24/on-lisp-in-15-minutes/
https://cse.buffalo.edu/~shapiro/Commonlisp/




#####
#
# clhs - the Common Lisp HyperSpec
# 2021dec06
#
#####

# «clhs»  (to ".clhs")
# (find-angg ".emacs"  "clhs")
# (find-epackage-links 'clhs "clhs" t)
# (find-epackage       'clhs)
# (code-c-d "clhs" "~/.emacs.d/elpa/clhs-20210428.1911/")
# (find-clhsfile "")
# (find-clhsfile "clhs.el")
# (find-efunction 'clhs-doc)
# https://gitlab.com/sam-s/clhs
# https://www.cliki.net/CLHS

# (find-status   "hyperspec")
# (find-vldifile "hyperspec.list")
# (find-udfile   "hyperspec/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
aptrm -y hyperspec
apti  -y hyperspec

# No or old version of the hyperspec found. Getting newer version
# Using the local file /root/tmp/HyperSpec-7-0.tar.gz
# (find-asrootfile "~/tmp/" "HyperSpec-7-0.tar.gz")



# (find-evardescr 'clhs-root)
# (find-evariable 'clhs-root)

(setq clhs-root "http://clhs.lisp.se/")
(setq clhs-root "file:///usr/share/doc/hyperspec/")

(clhs-doc "loop")
(clhs-doc "loop" 1)
(clhs-doc "with-open-file")

# (find-efunction 'clhs-doc)
# (gethash (upcase "loop")   (clhs-symbols))
# (gethash (upcase "reduce") (clhs-symbols))
# (gethash (upcase "loopy")  (clhs-symbols))

(setq ee-clhs-root "file:///usr/share/doc/hyperspec/")

(defun ee-clhs-url (symbolname)
  (let ((suburl (gethash (upcase symbolname) (clhs-symbols))))
    (if suburl (concat ee-clhs-root suburl))))

(defun find-clhsdoc (symbolname)
  (let ((url (ee-clhs-url symbolname)))
    (if (not url) (error))
    (brg url)))

(find-clhsdoc "loop")
(find-clhsdoc "read-from-string")

http://clhs.lisp.se/Body/m_loop.htm
file:///usr/share/doc/hyperspec/Body/m_loop.htm
https://novaspec.org/cl/f_eval-when

(browse-url "http://clhs.lisp.se/Body/m_loop.htm")
(browse-url "file:///usr/share/doc/hyperspec/Body/m_loop.htm")




#####
#
# clhs-debian - a.k.a. hyperspec
# 2022sep03
#
#####

# «clhs-debian»  (to ".clhs-debian")
# (find-status   "hyperspec")
# (find-vldifile "hyperspec.list")
# (find-udfile   "hyperspec/")
# (find-vldifile "hyperspec.postinst")
# (find-vldifile "hyperspec.postinst" "FILE=/root/tmp/HyperSpec-7-0.tar.gz")
# (find-vldifile "hyperspec.postinst" "ftp://ftp.lispworks.com/")
# (find-vldifile "hyperspec.prerm")
# (find-vldifile "hyperspec.postrm")
# (find-vldifile "hyperspec.conffiles")
# (find-vldifile "hyperspec.config")
# (find-vldifile "hyperspec.config" "FILE=/root/tmp/HyperSpec-7-0.tar.gz")
# (find-vldifile "hyperspec.templates")
# (find-vldifile "hyperspec.md5sums")
# (find-fline "/etc/emacs/site-start.d/60hyperspec.el")
# file:///usr/share/doc/hyperspec/Front/Contents.htm

/home/edrx/e(edrx:sc)# apti hyperspec
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  hyperspec
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 9876 B of archives.
After this operation, 34.8 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/contrib amd64 hyperspec all 1.32 [9876 B]
Fetched 9876 B in 1s (10.8 kB/s)
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)
debconf: falling back to frontend: Readline
Preconfiguring packages ...
Selecting previously unselected package hyperspec.
(Reading database ... 252368 files and directories currently installed.)
Preparing to unpack .../hyperspec_1.32_all.deb ...
Unpacking hyperspec (1.32) ...
Setting up hyperspec (1.32) ...
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)
debconf: falling back to frontend: Readline
No or old version of the hyperspec found. Getting newer version
Downloading the hyperspec from the Internet
--2021-12-06 11:48:41--  ftp://ftp.lispworks.com/pub/software_tools/reference/HyperSpec-7-0.tar.gz
           => '/root/tmp/HyperSpec-7-0.tar.gz'
Resolving ftp.lispworks.com (ftp.lispworks.com)... 92.243.11.64
Connecting to ftp.lispworks.com (ftp.lispworks.com)|92.243.11.64|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pub/software_tools/reference ... done.
==> SIZE HyperSpec-7-0.tar.gz ... 2032830
==> PASV ... done.    ==> RETR HyperSpec-7-0.tar.gz ... done.
Length: 2032830 (1.9M) (unauthoritative)

HyperSpec-7-0.tar.gz      100%[=====================================>]   1.94M  1.10MB/s    in 1.8s    

2021-12-06 11:48:45 (1.10 MB/s) - '/root/tmp/HyperSpec-7-0.tar.gz' saved [2032830]

(defun clhs-doc (symbol-name &optional kill)

# (find-asrootfile "~/tmp/" "HyperSpec-7-0.tar.gz")




#####
#
# clhs-lua
# 2024sep21
#
#####

# «clhs-lua»  (to ".clhs-lua")
# (find-node "(cl)For Clauses" "for VAR being the hash-keys")
# (find-efunction 'find-clhsdoci)
# (find-blogme3 "clhs-symbols.lua")

(defmacro ee-with-clhs-symbols (&rest body)
  `(let* ((h (clhs-symbols))
	  (pairs0 (cl-loop for k being the hash-keys of h
			   using (hash-values v)
			   collect (list k v)))
	  (pairs1 (seq-take pairs0 978))
	  (pairs2 (cl-loop for (k v) in pairs1
			   collect (format "%-32s = \"%s\","
					   (format "[\"%s\"]" k) v)))
	  (pairs3 (mapconcat 'identity pairs2 "\n")))
     ,@body))

(find-ehashtable (ee-with-clhs-symbols h))
(find-eppp       (ee-with-clhs-symbols pairs0))
(find-eppp       (ee-with-clhs-symbols pairs1))
(find-eppp       (ee-with-clhs-symbols pairs2))
(find-estring    (ee-with-clhs-symbols pairs3))





#####
#
# Common Lisp, The Language (Steele)
# 2006oct04
#
#####

# «common-lisp-the-language»  (to ".common-lisp-the-language")
# (find-angg ".emacs" "cltl")
# https://en.wikipedia.org/wiki/Common_Lisp_the_Language
# https://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
# https://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_src.tgz
# https://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_dvi.tgz

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv ~/usrc/cltl_src/
tar -C ~/usrc/ -xvzf \
  $S/https/www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_src.tgz
tar -C ~/usrc/cltl_src/ -xvzf \
  $S/https/www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_dvi.tgz

cd     ~/usrc/cltl_src/
mv -iv cltl_dvi/clm.dvi .
dvipdf clm.dvi

# (find-extra-file-links "~/usrc/cltl_src/clm.pdf" "clm")
# (code-c-d "clm" "~/usrc/cltl_src/")
# (find-clmfile "")
# (code-pdf-page "clm" "~/usrc/cltl_src/clm.pdf")
# (code-pdf-text "clm" "~/usrc/cltl_src/clm.pdf")
# (find-clmpage)
# (find-clmtext)

# https://unix.stackexchange.com/questions/371201/how-to-resize-a-pdfs-pages


# http://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
# https://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_src.tgz
# (code-c-d "cltl" "~/usrc/cltl_src/")
# (find-cltlfile "")
#*
rm -Rv ~/usrc/cltl_src/
tar -C ~/usrc/ -xvzf \
  $S/http/www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_src.tgz
cd     ~/usrc/cltl_src/
# LaTeXing clm.tex would be hard - it's for LaTeX 2.09.
# We just unpack the "official" dvi instead.

mkdir  ~/usrc/cltl_src/
cd     ~/usrc/cltl_src/
tar -C ~/usrc/cltl_src/ -xvzf \
  $S/https/www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_dvi.tgz
mv -iv cltl_dvi/clm.dvi .

# Ouch, dvips'ing clm.dvi doesn't make it include the figures...
# Commented out.
# dvips clm.dvi

cd     ~/usrc/cltl_src/
dvipdf clm.dvi

#*
# (code-dvi "cltl"    (ee-cltlfile "clm.dvi"))
# (code-dvi "cltldvi" (ee-cltlfile "clm.dvi"))
# (code-ps  "cltlps"  (ee-cltlfile "clm.ps"))
# (find-cltlpage 1)
# (find-cltlpage (+ 24 324))

# (find-angg ".zshrc" "TeX")
# (find-angg ".zshrc" "TeX" "dvieps-l")
# (find-cltlsh "strings clm.dvi" "psfile=acos-plot.ps")
# (find-cltlsh "dvitype -output-level=1 clm.dvi")

# http://dto.freeshell.org/e/cl.e
# (find-dtoefile "cl.e")
# (find-dtoefile "init.el" "(@* \"ansicl\")")

# 2007sep19:
# http://dto.freeshell.org/e/cl-guide.el
# (code-dvi       "cltl" "~/usrc/cltl_src/clm.dvi")
# (code-pdftotext "cltl" "~/usrc/cltl_src/clm.pdf")
# (find-cltlpage 1)
# (find-cltltext)




#####
#
# dpans2texi-2023
# 2023jan12
#
#####

# «dpans2texi-2023»  (to ".dpans2texi-2023")

# 2023jan12:
# https://www.cliki.net/dpans2texi
# https://github.com/xach/dpans
# (find-git-links "https://github.com/xach/dpans" "dpans")
# (code-c-d "dpans" "~/usrc/dpans/")
# (find-dpansfile "")

https://github.com/rebcabin/dpans2texi

# (find-git-links "https://github.com/rebcabin/dpans2texi" "dpans2texi")
# (code-c-d "dpans2texi" "~/usrc/dpans2texi/")
# (find-dpans2texifile "")
# (find-dpans2texifile "README")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/dpans2texi/
cd      ~/usrc/
git clone https://github.com/rebcabin/dpans2texi
cd      ~/usrc/dpans2texi/

export PAGER=cat
git branch --list -a
git for-each-ref
git log --oneline --graph --all -20

./configure |& tee oc
make |& tee om

# (find-dpans2texifile "README")





#####
#
# dpans2texi
# 2009jul12
#
#####

# «dpans2texi»  (to ".dpans2texi")
# <edrx> clhs format
# <specbot> http://www.lispworks.com/reference/HyperSpec/Body/f_format.htm
# <edrx> is that available in info format?
# <stassats> search for dpans2texi
# http://www.phys.au.dk/~harder/dpans.html
# http://www.phys.au.dk/~harder/dpans2texi-1.05.tar.gz
# (code-c-d "dpans2texi" "~/usrc/dpans2texi-1.05/")
# (find-dpans2texifile "")
# (find-dpans2texifile "Makefile" "wget:")
# (find-dpans2texifile "Makefile.am" "wget:")
# (find-fline "~/tmp/dpans3.tgz")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/cl/
mkdir  /tmp/cl/
cd     /tmp/cl/
wget -r -np -nd -A tex http://quimby.gnus.org/circus/cl/dpANS3/
wget -r -np -nd -A tex http://quimby.gnus.org/circus/cl/dpANS3R/
tar -cvzf ~/tmp/dpans3.tgz *

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv ~/usrc/dpans2texi-1.05/
tar -C ~/usrc/ -xvzf \
  $S/http/www.phys.au.dk/~harder/dpans2texi-1.05.tar.gz
cd     ~/usrc/dpans2texi-1.05/

tar -xvzf ~/tmp/dpans3.tgz
./configure |& tee oc
make        |& tee om

#*
# (find-dpans2texifile "")
cd ~/usrc/dpans2texi-1.05/
cp -v ansicl ansicl-* ~/info/

#*
# (find-node "(~/usrc/dpans2texi-1.05/ansicl)")
# (find-node "(ansicl)")
# (find-node "(ansicl)Printer")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo install-info         --section Lisp ansicl ~/info/ansicl
sudo install-info --quiet --section Lisp ansicl ~/info/ansicl
sudo install-info --remove ansicl

# (find-node "(dir)Top" "ANSI Common Lisp")
# (find-node "(ansicl)Backquote")


# 2011oct12:
# http://www.emacswiki.org/emacs/CommonLispHyperspec
# http://www.lispworks.com/documentation/HyperSpec/Body/02_dh.htm





#####
#
# CL syntax for comments
# 2011nov27
#
#####

# «comments»  (to ".comments")
# (find-clhsdoc "Body/02_ddb" "Semicolon")
# (find-clhsdoc "Body/02_dhs" "#|...|# is treated as a comment")
# https://stackoverflow.com/questions/6365334/lisp-commenting-convention
# (find-node "(ansicl)Semicolon")
# (find-node "(ansicl)Semicolon" "Use of Double Semicolon")
# (find-node "(ansicl)Sharpsign" "#|...|#")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(+ 1 2)
(+ 1 #|
  Blah
|#
2)




#####
#
# slime-2012
# 2012sep08
#
#####

# «slime-2012»  (to ".slime-2012")
# http://www.emacswiki.org/SlimeMode
# http://common-lisp.net/project/slime/
# http://slime-tips.tumblr.com/
# https://mailman.common-lisp.net/listinfo/slime-devel
# https://mailman.common-lisp.net/pipermail/slime-devel/
#
# (find-angg "~/.sbclrc")

# http://www.youtube.com/watch?v=_B_4vhsmRRI
# (find-youtubedl-links "/sda5/videos/" "Marco_Baringer_s_SLIME_Tutorial_Video" "_B_4vhsmRRI" ".flv" "slimetv")
# (code-video "slimetut" "/sda5/videos/Marco_Baringer_s_SLIME_Tutorial_Video-_B_4vhsmRRI.flv")
# http://www.pchristensen.com/blog/articles/reference-for-the-slimelispemacs-screencast/
# (find-slimetut)
# (find-slimetut "0:25" "Recommendation to always work with the latest build of SLIME from CVS")
# (find-slimetut "1:03" "Setting up SBCL to be able to load Swank")
# (find-slimetut "1:37" "Edit (or create) the SBCL initialization file. (The directory he used was /home/[user]/.sbclrc ) Add the following code:")
# (find-slimetut "2:53" "Create a /home/[user]/systems/ folder and create a link to /home/[user]/slime/swank.asd in that folder")
# (find-slimetut "3:08" "In the SBCL prompt, load Swank by typing")
# (find-slimetut "3:23" "Use a secure shell to create a communication link for Slime and the remote Swank process")
# (find-slimetut "3:56" "Swank will attempt to use second stream for output")
# (find-slimetut "4:37" "To start the Swank server, enter this at the SBCL prompt:")
# (find-slimetut "4:48" "Configure your local emacs by creating a slime.el file")
# (find-slimetut "4:59" "Selected contents of Marco's slime.el file")
# (find-slimetut "7:10" "In Emacs, start SLIME and connect to remote Lisp by entering the following key chord:")
# (find-slimetut "8:18" "SLIME REPL Presentations")
# (find-slimetut "9:25" "REPL shortcuts")
# (find-slimetut "10:45" "Key chords to find out information about a symbol: (see also Documentation)")
# (find-slimetut "12:25" "Package declarations.")
# (find-slimetut "12:40" "Compiling and evaluating code.")
# (find-slimetut "13:45" "The SLIME Selector lets you jump to a number of places with a single key")
# (find-slimetut "15:15" "Pressing ` ` (space) after a typing a function shows the parameter list in the minibuffer.")
# (find-slimetut "16:25" "Marco does a cool demonstration of Emacs keyboard macros")
# (find-slimetut "17:05" "Demonstration of Emacs sexp navigation")
# (find-slimetut "19:35" "SLIME Completion in REPL")
# (find-slimetut "22:20" "Welcome to the SLIME debugger buffer (sldb)")
# (find-slimetut "22:27" "Backtrace and frames. The documentation is more thorough")
# (find-slimetut "23:00" "Use `t' to toggle details when on a backtrace frame")
# (find-slimetut "24:10" "In debugger/backtrace frame")
# (find-slimetut "25:04" "Navigating through the REPL history")
# (find-slimetut "26:00" "Optional declarations - these setting are used to ensure all debugging information is shown for the demo")
# (find-slimetut "27:00" "Emacs tools for writing Lisp code")
# (find-slimetut "27:15" "Auto-closing parentheses")
# (find-slimetut "27:58" "Sexp navigation")
# (find-slimetut "28:40" "Transpose sexps")
# (find-slimetut "29:10" "kill sexp")
# (find-slimetut "29:45" "M-[num] ( = wrap [num] close parentheses after next sexp")
# (find-slimetut "33:35" "Recompile file, demonstration of the compiler notes buffer")
# (find-slimetut "35:00" "When you're on a warning and you hit enter, it takes you to the place in the file where the error is")
# (find-slimetut "35:45" "Debugging methods")
# (find-slimetut "37:42" "Using asdf-install to download and configure an external package. At the REPL, type")
# (find-slimetut "39:02" "Inspecting a package")
# (find-slimetut "45:25" "Tracing")
# (find-slimetut "46:18" "Summary of topics covered:")
# (find-slimetut "47:20" "Inspecting objects that aren't printable")
# (find-slimetut "50:25" "Cross reference facility - for instance,you add new parameter to a function and you want to update every call to it")
# (find-slimetut "53:25" "Final thoughts")



# http://common-lisp.net/project/slime/snapshots/slime-current.tgz

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv ~/usrc/slime-2012-09-08/
tar -C ~/usrc/ -xvzf $S/http/common-lisp.net/project/slime/snapshots/slime-current.tgz
cd     ~/usrc/slime-2012-09-08/
cd     ~/usrc/slime-2012-09-08/doc/
make slime.info
cp -v slime.info ~/info/

# (code-c-d "slime" "~/usrc/slime-2012-09-08/" "~/info/slime")
# (code-c-d "slime" "~/usrc/slime-2012-09-08/" "slime")
# (find-slimefile "")
# (find-slimefile "README")
# (find-slimefile "README" "Add this to your ~/.emacs")
# (find-slimefile "doc/Makefile")
# (find-slimefile "doc/")
# (find-slimenode "")
# (find-slimenode "Installation")

(setq inferior-lisp-program "sbcl")
(add-to-list 'load-path "~/usrc/slime-2012-09-08/")
(require 'slime)
(slime-setup)

# (find-ebuffer "*slime-repl sbcl*")
# (find-slimetut)



;; (find-efunction 'find-debpkg-links)
;; (find-efunction 'ee-debpkgname-ask)
(defun ee-time-around-point (&optional show-it)
  (interactive "p")
  (ee-stuff-around-point "0-9:" show-it))

(defun find-foo (&optional time &rest rest)
  (interactive (list (ee-time-around-point)))
  (find-slimetut time))



#####
#
# Slime: Marco Baringer's tutorial
# 2022jul30
#
#####

# «slime-baringer»  (to ".slime-baringer")
# https://slime.common-lisp.dev/
# http://common-lisp.net/project/slime/slime.mov
# (find-fline "$S/http/common-lisp.net/project/slime/" "slime.mov")
# https://www.youtube.com/watch?v=NUpAvqa5hQw
# (find-yttranscript-links "baringer" "NUpAvqa5hQw")
# (setq ee-mpv-video-options '("--fs" "--osd-level=2"))
# (setq ee-mpv-video-options '(       "--osd-level=2"))
# (code-video "baringervideo" "$S/http/common-lisp.net/project/slime/slime.mov")
# (find-baringervideo "0:00")

% (find-baringervideo "00:00" "hello my name is Marco banja this movie")
% (find-baringervideo "00:02" "is an introduction to the Common Lisp")
% (find-baringervideo "00:04" "development environment slime the first")
% (find-baringervideo "00:07" "thing we're going to do is we're going")
% (find-baringervideo "00:09" "to install download install and setup")
% (find-baringervideo "00:12" "slime for the purpose of this demo we're")
% (find-baringervideo "00:16" "going to be running slime on a remote")
% (find-baringervideo "00:18" "machine and we're going to connect to it")
% (find-baringervideo "00:21" "from our local Emacs so let's get slime")
% (find-baringervideo "00:35" "the best way in fact really the only way")
% (find-baringervideo "00:39" "to use slime is to always work with the")
% (find-baringervideo "00:43" "latest CBS version if you happen to use")
% (find-baringervideo "00:47" "a released version and you run into a")
% (find-baringervideo "00:49" "bug or there's something that doesn't")
% (find-baringervideo "00:51" "work the first thing everyone's going to")
% (find-baringervideo "00:52" "tell you is to grab the CVS version and")
% (find-baringervideo "00:54" "try with that so you might as well start")
% (find-baringervideo "00:59" "directly with the real thing so now")
% (find-baringervideo "01:02" "we've downloaded slime we're going to be")
% (find-baringervideo "01:04" "using SBC L this is an x86 machine the")
% (find-baringervideo "01:10" "first thing we need to do is we need to")
% (find-baringervideo "01:12" "tell s PCL how to load up swank swank is")
% (find-baringervideo "01:16" "the lisp side of slime slime has two")
% (find-baringervideo "01:20" "parts Emacs and lisp within the lisp")
% (find-baringervideo "01:23" "implementation slime actually runs a")
% (find-baringervideo "01:25" "network server that reads and handles")
% (find-baringervideo "01:29" "requests coming from Emacs")
% (find-baringervideo "01:30" "this characteristic is what allows us to")
% (find-baringervideo "01:33" "run slime on one machine and run Emacs")
% (find-baringervideo "01:36" "on the other selects good Emacs")
% (find-baringervideo "01:41" "let's go set up to the file")
% (find-baringervideo "01:48" "dot s PCL RC this is slimes")
% (find-baringervideo "01:51" "initialization file this is run whenever")
% (find-baringervideo "01:53" "SB CL I'm sorry this is SP CLS")
% (find-baringervideo "01:56" "initialization file this is 1 whenever s")
% (find-baringervideo "01:59" "b CL starts up and what we're going to")
% (find-baringervideo "02:01" "do here is we're going to tell SB CL")
% (find-baringervideo "02:03" "that it needs to use a SDF SDF is a make")
% (find-baringervideo "02:11" "type program and loading swank is done")
% (find-baringervideo "02:15" "through a SDF and we need to tell a SDF")
% (find-baringervideo "02:18" "that it should look for system")
% (find-baringervideo "02:20" "definition files in a directory called")
% (find-baringervideo "02:23" "home seg V systems yes asdf central")
% (find-baringervideo "02:32" "registry save the file now let's go back")
% (find-baringervideo "02:37" "to our terminal the remote machine")
% (find-baringervideo "02:39" "startup SP CL what we're gonna do is")
% (find-baringervideo "02:43" "we're gonna load a swank course we told")
% (find-baringervideo "02:52" "a SDF to look for system definition")
% (find-baringervideo "02:55" "files in a directory called systems")
% (find-baringervideo "02:58" "systems but we didn't make the directory")
% (find-baringervideo "03:01" "and we certainly didn't populate it with")
% (find-baringervideo "03:05" "Swank's ASD file let's try again")
% (find-baringervideo "03:13" "operate on system")
% (find-baringervideo "03:16" "Asda load up load Swank okay so now")
% (find-baringervideo "03:22" "Swank's compiling let's go here we have")
% (find-baringervideo "03:25" "swank running on a remote machine so we")
% (find-baringervideo "03:27" "need to somehow connect and send our")
% (find-baringervideo "03:30" "requests back and forth we don't want to")
% (find-baringervideo "03:33" "and actually I can't at the moment on")
% (find-baringervideo "03:35" "that machine")
% (find-baringervideo "03:36" "open up slimes Swank's port to the")
% (find-baringervideo "03:39" "entire world so what we're gonna do is")
% (find-baringervideo "03:41" "we're gonna set up an SSH tunnel between")
% (find-baringervideo "03:44" "the local port 4001 and the remote port")
% (find-baringervideo "03:48" "four thousand five there we go")
% (find-baringervideo "03:54" "now let's go back to our SP CL buffer")
% (find-baringervideo "03:59" "the other thing we're going to need to")
% (find-baringervideo "04:01" "do when slime communicates with Swank")
% (find-baringervideo "04:04" "and when Swank communicates with slime")
% (find-baringervideo "04:07" "it will attempt to use a second port a")
% (find-baringervideo "04:10" "second stream just for the output this")
% (find-baringervideo "04:14" "tends to make things sufficiently")
% (find-baringervideo "04:16" "significantly faster and it also helps")
% (find-baringervideo "04:19" "avoid if I remember correctly certain")
% (find-baringervideo "04:23" "odd hang-ups use dedicated output stream")
% (find-baringervideo "04:28" "we're gonna turn that off since we're")
% (find-baringervideo "04:30" "only allowing one stream between our")
% (find-baringervideo "04:34" "local computer and this remote")
% (find-baringervideo "04:36" "development machine so we're now ready")
% (find-baringervideo "04:39" "to create with a swank server")
% (find-baringervideo "04:44" "so now Swank is up on the remote machine")
% (find-baringervideo "04:47" "and we can go back to our locally mix")
% (find-baringervideo "04:49" "and we can configure you max")
% (find-baringervideo "04:56" "dottie max-d now I've already got my own")
% (find-baringervideo "05:00" "slime configuration file I'm not going")
% (find-baringervideo "05:02" "to go into all the stuff I have in here")
% (find-baringervideo "05:04" "I'm just going to concentrate on these")
% (find-baringervideo "05:06" "first few lines which is what you really")
% (find-baringervideo "05:08" "need you have to tell Emacs where it")
% (find-baringervideo "05:10" "finds the slime Durell file notice this")
% (find-baringervideo "05:13" "is a local directory you need to make")
% (find-baringervideo "05:16" "sure when you're doing this that you're")
% (find-baringervideo "05:18" "running the slave the same version of")
% (find-baringervideo "05:20" "slime on both machines we then require")
% (find-baringervideo "05:23" "slime we tell Emacs that when it loads")
% (find-baringervideo "05:25" "up a list file it should jump to slime")
% (find-baringervideo "05:27" "mode that's what this call does if you")
% (find-baringervideo "05:33" "run slime locally if the lisp is on the")
% (find-baringervideo "05:35" "same machine as Emacs then Emacs will")
% (find-baringervideo "05:37" "start up the list by calling the")
% (find-baringervideo "05:39" "inferior list program this executable")
% (find-baringervideo "05:41" "should start up your Lisp the indent")
% (find-baringervideo "05:44" "function we want to use Common Lisp")
% (find-baringervideo "05:46" "indentation and not in this indentation")
% (find-baringervideo "05:48" "complete symbol function I really like")
% (find-baringervideo "05:51" "fuzzy completion slime offers a couple")
% (find-baringervideo "05:55" "different kinds of completions this is")
% (find-baringervideo "05:57" "the one I'm going to use if you want to")
% (find-baringervideo "05:58" "look in the documentation there are")
% (find-baringervideo "06:00" "other completions available the Common")
% (find-baringervideo "06:02" "Lisp hyperspectral well I have a local")
% (find-baringervideo "06:05" "copy of the hyper spec installed so that")
% (find-baringervideo "06:07" "I can then go and jump immediately to")
% (find-baringervideo "06:10" "the documentation for standard common")
% (find-baringervideo "06:11" "list symbols instead of having to go out")
% (find-baringervideo "06:13" "to lisp org or this works and the")
% (find-baringervideo "06:16" "startup animation i generally turn this")
% (find-baringervideo "06:18" "off i don't really like it for the")
% (find-baringervideo "06:20" "purpose of this demo i think we'll turn")
% (find-baringervideo "06:21" "it on last thing we need since we're")
% (find-baringervideo "06:26" "running on a remote machine and we're")
% (find-baringervideo "06:29" "developing on a local machine we tell")
% (find-baringervideo "06:31" "slime and Emacs how to translate the")
% (find-baringervideo "06:34" "that's this code down here does okay")
% (find-baringervideo "06:38" "translate to list file name takes the")
% (find-baringervideo "06:41" "name of an Emacs buffer and converts it")
% (find-baringervideo "06:44" "into the name of the corresponding file")
% (find-baringervideo "06:46" "on the remote machine translate from")
% (find-baringervideo "06:49" "Lisp does the opposite okay basically in")
% (find-baringervideo "06:53" "this case since I'm using")
% (find-baringervideo "06:57" "you can see the buffer filename here all")
% (find-baringervideo "07:00" "this amounts to is adding and removing")
% (find-baringervideo "07:03" "this ssh username and host prefix which")
% (find-baringervideo "07:07" "is exactly what this does")
% (find-baringervideo "07:09" "well now we're ready slime Connect since")
% (find-baringervideo "07:14" "our Lisp is already running")
% (find-baringervideo "07:16" "we don't want Emacs to start up its owns")
% (find-baringervideo "07:18" "its own lisp so we use slime connect and")
% (find-baringervideo "07:20" "it asks us what host and what port is")
% (find-baringervideo "07:22" "listening on thanks to the SSH tunnel")
% (find-baringervideo "07:25" "we're running on the local host port")
% (find-baringervideo "07:28" "4005 and now here we are directly in a")
% (find-baringervideo "07:33" "rebel we can start typing away okay")
% (find-baringervideo "07:41" "this is running on the remote machine if")
% (find-baringervideo "07:47" "we have a look at what default path name")
% (find-baringervideo "07:49" "defaults is homesite v you'll just have")
% (find-baringervideo "07:51" "to trust me that directory doesn't exist")
% (find-baringervideo "07:53" "on a local machine and now we can do")
% (find-baringervideo "07:57" "through this Emacs on this machine")
% (find-baringervideo "08:01" "anything we want on the remote machine")
% (find-baringervideo "08:05" "first thing we're gonna do is we're")
% (find-baringervideo "08:08" "going to talk a little bit about the")
% (find-baringervideo "08:09" "rebel now")
% (find-baringervideo "08:18" "so I trying to decide what to start with")
% (find-baringervideo "08:21" "and I never really know let's start with")
% (find-baringervideo "08:23" "the slime rebel presentations it's")
% (find-baringervideo "08:26" "actually pretty interesting now I'm sure")
% (find-baringervideo "08:30" "you all know about these variables star")
% (find-baringervideo "08:34" "star star and star star star which allow")
% (find-baringervideo "08:37" "you to get at the objects returned by")
% (find-baringervideo "08:40" "previous evaluations")
% (find-baringervideo "08:41" "well slime has something called I")
% (find-baringervideo "08:44" "believe the technical term is output")
% (find-baringervideo "08:47" "presentations which allow you to get at")
% (find-baringervideo "08:49" "any value that's ever appeared in this")
% (find-baringervideo "08:51" "rebel and just like you to notice that")
% (find-baringervideo "08:59" "this even though it looks like a string")
% (find-baringervideo "09:03" "is not a string using fact on marker")
% (find-baringervideo "09:06" "representing the actual object okay as")
% (find-baringervideo "09:09" "we can see there there is no string")
% (find-baringervideo "09:13" "marshalling and unn marshalling going on")
% (find-baringervideo "09:15" "okay it's just a very convenient way")
% (find-baringervideo "09:19" "pardon me to get at previous values next")
% (find-baringervideo "09:25" "thing we're going to talk about other")
% (find-baringervideo "09:26" "rebel shortcuts if you're at the rebel")
% (find-baringervideo "09:28" "prompt and you hit the comma it asks you")
% (find-baringervideo "09:31" "for a command here in the mini buffer")
% (find-baringervideo "09:32" "gonna type help here's a list of all the")
% (find-baringervideo "09:35" "rebel shortcut commands these are")
% (find-baringervideo "09:39" "convenient operations that you do that")
% (find-baringervideo "09:43" "you can do from list or you can do")
% (find-baringervideo "09:46" "otherwise they're sort of wrapped up in")
% (find-baringervideo "09:49" "a in one simple to use say name")
% (find-baringervideo "10:02" "let's start with our example what we're")
% (find-baringervideo "10:04" "going to do in this example is we're")
% (find-baringervideo "10:07" "gonna create a file which is going to")
% (find-baringervideo "10:11" "translate from Morse code to Lisp")
% (find-baringervideo "10:17" "strings and back and forth so let's open")
% (find-baringervideo "10:21" "up a new file")
% (find-baringervideo "10:27" "on the remote machine")
% (find-baringervideo "10:30" "first thing we do as we create our new")
% (find-baringervideo "10:33" "package now I know how new package works")
% (find-baringervideo "10:43" "okay let's pretend though that I'd")
% (find-baringervideo "10:45" "forgotten don't know what how to call")
% (find-baringervideo "10:48" "don't know what the parameters are from")
% (find-baringervideo "10:50" "new package we've actually got a couple")
% (find-baringervideo "10:52" "options we can use ctrl D D okay slime")
% (find-baringervideo "10:59" "described symbol whenever I use a key")
% (find-baringervideo "11:03" "sequence I'm going to open up the key")
% (find-baringervideo "11:06" "help buffer so that you know what")
% (find-baringervideo "11:08" "command I'm running my key bindings are")
% (find-baringervideo "11:11" "slightly different than what slime")
% (find-baringervideo "11:12" "shifts with so in case you try something")
% (find-baringervideo "11:15" "that I'm doing and it doesn't work make")
% (find-baringervideo "11:18" "sure that you haven't that you have key")
% (find-baringervideo "11:19" "bindings are the same as mine so let's")
% (find-baringervideo "11:21" "try running control C control D D and")
% (find-baringervideo "11:26" "here we go a description of the symbol")
% (find-baringervideo "11:28" "def package telling us it's a macro")
% (find-baringervideo "11:31" "function and telling us the arguments of")
% (find-baringervideo "11:33" "the macro well package and rest options")
% (find-baringervideo "11:37" "that might be true but that's pretty")
% (find-baringervideo "11:40" "useless however here we do have the def")
% (find-baringervideo "11:44" "we do have the macro documentation it's")
% (find-baringervideo "11:47" "this block okay which is pretty which is")
% (find-baringervideo "11:52" "enough but if this definition hadn't")
% (find-baringervideo "11:54" "been there we have another option")
% (find-baringervideo "11:57" "control C control D h-hi perspect")
% (find-baringervideo "12:02" "gonna do that now opens up in a browser")
% (find-baringervideo "12:06" "in my case I'm using w3m inside Emacs")
% (find-baringervideo "12:09" "the corresponding hyper spectate for")
% (find-baringervideo "12:13" "that symbol or function or macro")
% (find-baringervideo "12:15" "whatever so here we can read all we want")
% (find-baringervideo "12:19" "it about description about def package")
% (find-baringervideo "12:25" "now let's write the in package for one")
% (find-baringervideo "12:29" "so now our files ready the first thing")
% (find-baringervideo "12:32" "we're gonna want to do")
% (find-baringervideo "12:33" "we've written the code we haven't")
% (find-baringervideo "12:36" "actually executed it yet we need to send")
% (find-baringervideo "12:38" "the code to Emacs there are a couple")
% (find-baringervideo "12:40" "ways to send code to Emacs I'm only")
% (find-baringervideo "12:43" "going to mention two of them the first")
% (find-baringervideo "12:46" "is ctrl alt X okay slime eval D fun it's")
% (find-baringervideo "12:53" "a slight misnomer it should be called")
% (find-baringervideo "12:54" "slime eval top-level")
% (find-baringervideo "12:55" "what it does is it looks at the cursor")
% (find-baringervideo "12:58" "figures out where the point is it")
% (find-baringervideo "13:00" "figures out what is the top level form")
% (find-baringervideo "13:02" "that contains the point and it evaluates")
% (find-baringervideo "13:05" "that so if I now here control all X its")
% (find-baringervideo "13:10" "evaluated this form the entire DEF")
% (find-baringervideo "13:11" "backage form and it's giving us here in")
% (find-baringervideo "13:14" "the mini buffer the output it's dropping")
% (find-baringervideo "13:17" "max down on the line another option we")
% (find-baringervideo "13:22" "have is control X control e slime eval")
% (find-baringervideo "13:26" "last expression what this does is this")
% (find-baringervideo "13:29" "takes the form immediately preceding the")
% (find-baringervideo "13:32" "cursor whether it's top level or inside")
% (find-baringervideo "13:35" "something else or not and it evaluates")
% (find-baringervideo "13:37" "that and prints the return value let's")
% (find-baringervideo "13:39" "do that now and again we get package")
% (find-baringervideo "13:41" "Morse let's jump to our rebel and in")
% (find-baringervideo "13:46" "order to jump to the repple we're going")
% (find-baringervideo "13:47" "to show off one more feature of slime")
% (find-baringervideo "13:49" "which is the slime selector by default")
% (find-baringervideo "13:53" "it's not bound to any key i've globally")
% (find-baringervideo "13:55" "bound it to the f12 key so if I hit f12")
% (find-baringervideo "13:58" "question mark it shows me a list of")
% (find-baringervideo "14:02" "things places I can go with the short")
% (find-baringervideo "14:05" "key sequence in particular right now I'm")
% (find-baringervideo "14:07" "interested in this one read eval print")
% (find-baringervideo "14:09" "loop so I hit R and Here I am in the")
% (find-baringervideo "14:13" "rebel now let's check and see if the")
% (find-baringervideo "14:18" "package Morse does in fact exist it does")
% (find-baringervideo "14:21" "beautiful so let's use one of our rebel")
% (find-baringervideo "14:25" "shortcuts and hit comma here")
% (find-baringervideo "14:26" "exclamation point P well we'll use its")
% (find-baringervideo "14:30" "long name change package the mini buffer")
% (find-baringervideo "14:34" "now asks")
% (find-baringervideo "14:35" "for the name of the package we want to")
% (find-baringervideo "14:36" "move to we have completion here so if")
% (find-baringervideo "14:38" "you don't remember the complete name of")
% (find-baringervideo "14:39" "the package or if it has a very long")
% (find-baringervideo "14:41" "package in package Morse and notice that")
% (find-baringervideo "14:46" "our repla snout in the Morse package")
% (find-baringervideo "14:50" "let's use the slime selector again we'll")
% (find-baringervideo "14:53" "use L this time to jump back to the list")
% (find-baringervideo "14:56" "package we want to convert from Morse")
% (find-baringervideo "14:59" "code to list strings and we want to")
% (find-baringervideo "15:03" "convert from list strings to Morse code")
% (find-baringervideo "15:05" "obviously what we need here is a table")
% (find-baringervideo "15:07" "mapping the two so let's put that in a")
% (find-baringervideo "15:10" "parameter and notice that as soon as I")
% (find-baringervideo "15:16" "typed hit Def parameter and hit space")
% (find-baringervideo "15:18" "down here at the bottom I get the")
% (find-baringervideo "15:20" "laundry list for the parameter so I know")
% (find-baringervideo "15:24" "that it takes a variable let's call this")
% (find-baringervideo "15:27" "one Morse mapping space again here it is")
% (find-baringervideo "15:32" "reminding me but the next thing is a")
% (find-baringervideo "15:34" "value well we're just gonna use a very")
% (find-baringervideo "15:36" "simple a list and it's gonna map")
% (find-baringervideo "15:40" "characters such as a soother")
% (find-baringervideo "15:44" "corresponding string Morse code")
% (find-baringervideo "15:48" "equivalent now of course I don't know")
% (find-baringervideo "15:51" "the entire Morse code a lit by heart so")
% (find-baringervideo "15:54" "what we're gonna do so we're gonna ask")
% (find-baringervideo "15:59" "Google to give us the Morse code")
% (find-baringervideo "16:02" "alphabet")
% (find-baringervideo "16:11" "gotta love that Morse code alphabet")
% (find-baringervideo "16:15" "let's just copy this whole bit let's")
% (find-baringervideo "16:21" "jump back in Emacs paste now I'm gonna")
% (find-baringervideo "16:27" "do a little bit of Emacs macro hackery")
% (find-baringervideo "16:31" "defining keyboard macro redefine the")
% (find-baringervideo "16:37" "keyboard mac down open parenthesis")
% (find-baringervideo "16:40" "character 1 space end of line there we")
% (find-baringervideo "16:47" "go")
% (find-baringervideo "16:52" "so . comment and query i actually period")
% (find-baringervideo "16:55" "comma and question month obligate this")
% (find-baringervideo "17:04" "just for consistency now I'm gonna use")
% (find-baringervideo "17:06" "ctrl alt Q indents XP team Denton entire")
% (find-baringervideo "17:10" "form now let's move the cursor inside")
% (find-baringervideo "17:15" "this form and I'm going to talk about")
% (find-baringervideo "17:17" "I'm gonna introduce you to get another")
% (find-baringervideo "17:19" "way to send code to slime and it's")
% (find-baringervideo "17:22" "control C control scene slime compiled")
% (find-baringervideo "17:26" "defund again this is something of a")
% (find-baringervideo "17:28" "misnomer this should be signed slime")
% (find-baringervideo "17:30" "compiled top-level we all get in fact we")
% (find-baringervideo "17:32" "are in fact going to use this to compile")
% (find-baringervideo "17:34" "a def parameter form control C control C")
% (find-baringervideo "17:37" "and here down here we get compilation")
% (find-baringervideo "17:40" "finished there are two major differences")
% (find-baringervideo "17:42" "between this and control X control E and")
% (find-baringervideo "17:45" "ctrl alt x one is that this does not")
% (find-baringervideo "17:48" "print the return value it prints this")
% (find-baringervideo "17:51" "compilation error and two is that it")
% (find-baringervideo "17:54" "will generally compile the code with")
% (find-baringervideo "17:56" "different compiler settings if your Lisp")
% (find-baringervideo "17:59" "does support an interpreter mainly that")
% (find-baringervideo "18:02" "would be C Lisp you may find code runs")
% (find-baringervideo "18:08" "slightly differently or at least with")
% (find-baringervideo "18:10" "slightly slower or fasteners the case")
% (find-baringervideo "18:13" "may be")
% (find-baringervideo "18:17" "so we've now compiled this form just to")
% (find-baringervideo "18:22" "be clear what this does is it finds the")
% (find-baringervideo "18:25" "form creates a temporary file puts that")
% (find-baringervideo "18:27" "form in a file and then compiles and")
% (find-baringervideo "18:30" "loads that file so we have to find our")
% (find-baringervideo "18:32" "Morse mapping just a test let's define a")
% (find-baringervideo "18:37" "function which give it a character")
% (find-baringervideo "18:44" "returns the more string")
% (find-baringervideo "18:50" "okay this is going to be very simple")
% (find-baringervideo "19:04" "we actually want the CDR in this now")
% (find-baringervideo "19:08" "we've written the file is trying")
% (find-baringervideo "19:13" "to save it there we go let's now compile")
% (find-baringervideo "19:16" "the whole file control C control K okay")
% (find-baringervideo "19:22" "notice that we get down here in the mini")
% (find-baringervideo "19:25" "buffer compliation finished zero arrows")
% (find-baringervideo "19:26" "zero warnings zero notes so let's go")
% (find-baringervideo "19:30" "back to our rebel let's try calling")
% (find-baringervideo "19:32" "character to Morse what I'm going to do")
% (find-baringervideo "19:39" "here is I'm going to show off slimes")
% (find-baringervideo "19:41" "completion now I've typed the initial")
% (find-baringervideo "19:43" "part of the name of the function and")
% (find-baringervideo "19:45" "then I hit tab slime complete and I get")
% (find-baringervideo "19:49" "here a buffer with the list of all the")
% (find-baringervideo "19:52" "possible completions all the functions")
% (find-baringervideo "19:55" "or macros are variables that contain")
% (find-baringervideo "19:57" "Kerik which is what I had written at the")
% (find-baringervideo "20:00" "beginning there we go character to morse")
% (find-baringervideo "20:02" "and in this second column you'll notice")
% (find-baringervideo "20:04" "I get some brief information about the")
% (find-baringervideo "20:06" "symbol for example I can tell that")
% (find-baringervideo "20:08" "character is bound to a function and it")
% (find-baringervideo "20:11" "also names a class the same time I can")
% (find-baringervideo "20:14" "tell that all of these name functions")
% (find-baringervideo "20:17" "they're not bound variables they're not")
% (find-baringervideo "20:18" "bound a macro they don't name classes")
% (find-baringervideo "20:20" "and so forth so let's go down to")
% (find-baringervideo "20:22" "character to Morris and let's pass it a")
% (find-baringervideo "20:28" "character to Morris let's pass it m okay")
% (find-baringervideo "20:33" "this looks like it works")
% (find-baringervideo "20:35" "the only difference is that we're")
% (find-baringervideo "20:36" "getting a string we're getting a list")
% (find-baringervideo "20:38" "containing a string")
% (find-baringervideo "20:39" "for simplicity's sake I want just the")
% (find-baringervideo "20:46" "string itself we can do that")
% (find-baringervideo "20:53" "now let's redefine the function I'm")
% (find-baringervideo "20:55" "going to use control all X here jump")
% (find-baringervideo "21:00" "back to the repple recall it and there")
% (find-baringervideo "21:02" "we go okay so that's one function we'll")
% (find-baringervideo "21:08" "need another function we're gonna need")
% (find-baringervideo "21:11" "these Morse to character giving a Morse")
% (find-baringervideo "21:18" "character represented as a string we")
% (find-baringervideo "21:20" "need to return the corresponding")
% (find-baringervideo "21:21" "character we're just gonna use find for")
% (find-baringervideo "21:26" "this since we don't want to write out")
% (find-baringervideo "21:28" "another variable mapping back from the")
% (find-baringervideo "21:32" "more string to the character find the")
% (find-baringervideo "21:34" "more string in what sequence in the")
% (find-baringervideo "21:41" "Morse mapping the test should be a")
% (find-baringervideo "21:48" "string equal the key is the CDR and of")
% (find-baringervideo "21:54" "this we want the second or the first")
% (find-baringervideo "21:59" "sorry let's compile the whole file let's")
% (find-baringervideo "22:04" "go back to the repple let's test")
% (find-baringervideo "22:05" "character timorous to make sure it still")
% (find-baringervideo "22:07" "works now let's test Morse two character")
% (find-baringervideo "22:13" "and let's pass it / / the value dot")
% (find-baringervideo "22:19" "slash is not of type well welcome to the")
% (find-baringervideo "22:25" "slide debugger buffer this is your best")
% (find-baringervideo "22:27" "friend your worst enemy and everything")
% (find-baringervideo "22:29" "in between you will be spending a lot of")
% (find-baringervideo "22:31" "time in here so get used to it the value")
% (find-baringervideo "22:36" "is not a tight what we have up here is a")
% (find-baringervideo "22:39" "description of the condition in the air")
% (find-baringervideo "22:40" "that that occurred then we have a couple")
% (find-baringervideo "22:43" "lines naming the restarts and finally we")
% (find-baringervideo "22:46" "have a back-trace with all the frames")
% (find-baringervideo "22:50" "generally slime will show us only the")
% (find-baringervideo "22:52" "first few frames if we're interested in")
% (find-baringervideo "22:54" "more we just go down until we get to the")
% (find-baringervideo "22:57" "more tag and we can get to all the")
% (find-baringervideo "22:59" "frames we want when we're on a frame we")
% (find-baringervideo "23:02" "can use T toggle details to get")
% (find-baringervideo "23:07" "information about the local variables")
% (find-baringervideo "23:09" "for example Morse to character has a")
% (find-baringervideo "23:12" "local called Arg")
% (find-baringervideo "23:13" "/ all X 0 it's bound to the string - -")
% (find-baringervideo "23:18" "the function find position I told the")
% (find-baringervideo "23:22" "local variables on that this tells us")
% (find-baringervideo "23:25" "how it's being called okay the first")
% (find-baringervideo "23:28" "parameter passed was this string and it")
% (find-baringervideo "23:31" "was given a list of cons of lists a list")
% (find-baringervideo "23:36" "of Lists and we can see here the other")
% (find-baringervideo "23:40" "arguments passed were two functions CDR")
% (find-baringervideo "23:43" "and string equal")
% (find-baringervideo "23:52" "what is the problem here let's toggle")
% (find-baringervideo "23:58" "this again we see that we're trying to")
% (find-baringervideo "24:00" "call string equal passing it a string")
% (find-baringervideo "24:05" "and a list containing a string well I")
% (find-baringervideo "24:09" "think I know what that is in the")
% (find-baringervideo "24:12" "meantime let's show off the V key show")
% (find-baringervideo "24:15" "source this jumps to the source code of")
% (find-baringervideo "24:18" "the corresponding frame if I hit V")
% (find-baringervideo "24:21" "notice that Emacs")
% (find-baringervideo "24:24" "opened up a buffer and Here I am on the")
% (find-baringervideo "24:27" "function I go down here this should not")
% (find-baringervideo "24:32" "be CDR it should be second let's")
% (find-baringervideo "24:35" "redefine the function so we've redefined")
% (find-baringervideo "24:39" "it let's go back to our SL DB buffer and")
% (find-baringervideo "24:43" "in this case we're just going to try the")
% (find-baringervideo "24:46" "abort restart the a key slam abort will")
% (find-baringervideo "24:52" "always run this abort restart in this")
% (find-baringervideo "24:56" "case using any are using zero would be")
% (find-baringervideo "24:58" "the same thing for convenience I'm just")
% (find-baringervideo "24:59" "going to hit a and let's try calling it")
% (find-baringervideo "25:02" "again Morse to character by the way alt")
% (find-baringervideo "25:05" "n and alt p allow you to move through")
% (find-baringervideo "25:08" "the history okay have your rebel more")
% (find-baringervideo "25:13" "stew character here we go so")
% (find-baringervideo "25:23" "let's try something else let's try 2.2 /")
% (find-baringervideo "25:27" "let's try something a bit longer dot dot")
% (find-baringervideo "25:30" "slash slash dot dot question mark okay")
% (find-baringervideo "25:35" "so it looks like more stew character")
% (find-baringervideo "25:37" "works and it looks like character to")
% (find-baringervideo "25:38" "Moore's works")
% (find-baringervideo "25:41" "let's go use the slime selector again")
% (find-baringervideo "25:44" "back to this file let's go and let's")
% (find-baringervideo "25:47" "write the function that converts an")
% (find-baringervideo "25:52" "alpha string in other words a string of")
% (find-baringervideo "25:54" "characters into the corresponding more")
% (find-baringervideo "25:57" "string the first thing I'm gonna do is")
% (find-baringervideo "26:00" "I'm gonna the top of my file I'm gonna")
% (find-baringervideo "26:03" "add this key claim form I'm not")
% (find-baringervideo "26:08" "interested in speed I'm not interested")
% (find-baringervideo "26:10" "in safety actually I am interested in")
% (find-baringervideo "26:14" "safety and I'm very interested in")
% (find-baringervideo "26:15" "debugging what this does is this tells s")
% (find-baringervideo "26:18" "BCM that when it compiles this file it")
% (find-baringervideo "26:21" "should keep as much debugging")
% (find-baringervideo "26:22" "information and write as safe code as")
% (find-baringervideo "26:25" "possible and not worry about the")
% (find-baringervideo "26:27" "efficiency of the resulting code")
% (find-baringervideo "26:30" "basically this assures me that since I'm")
% (find-baringervideo "26:33" "doing a demo I'll get at all the")
% (find-baringervideo "26:35" "debugging information I'd like to show")
% (find-baringervideo "26:36" "you under certain compiler settings the")
% (find-baringervideo "26:39" "debugging information is removed either")
% (find-baringervideo "26:41" "because the variables are compiled are")
% (find-baringervideo "26:44" "optimized away or because entire stack")
% (find-baringervideo "26:46" "frames will disappear if function calls")
% (find-baringervideo "26:49" "have been inlined")
% (find-baringervideo "26:50" "and so forth so let's recompile the file")
% (find-baringervideo "26:54" "just for good measure we still get no")
% (find-baringervideo "26:57" "errors no warnings and no notes now")
% (find-baringervideo "27:00" "let's start writing the function before")
% (find-baringervideo "27:02" "I start writing this function I want to")
% (find-baringervideo "27:04" "talk a bit about some of the tools Emacs")
% (find-baringervideo "27:07" "offers us for writing Lisp code you've")
% (find-baringervideo "27:10" "already probably seen some of it so far")
% (find-baringervideo "27:12" "in this demo I'm going to talk about")
% (find-baringervideo "27:16" "first inserting parentheses together in")
% (find-baringervideo "27:21" "other words when I hit open parentheses")
% (find-baringervideo "27:23" "notice that two parentheses were")
% (find-baringervideo "27:25" "inserted both the opening and the")
% (find-baringervideo "27:27" "closing parentheses and the cursor was")
% (find-baringervideo "27:29" "placed between them so I can type for")
% (find-baringervideo "27:32" "example")
% (find-baringervideo "27:37" "Frank")
% (find-baringervideo "27:38" "42 and now when I hit a closing")
% (find-baringervideo "27:41" "parenthesis it doesn't actually insert")
% (find-baringervideo "27:43" "anything it just moves the cursor past")
% (find-baringervideo "27:46" "the corresponding parenthesis had there")
% (find-baringervideo "27:48" "been any space here as a convenience it")
% (find-baringervideo "27:50" "chews up any horizontal space another")
% (find-baringervideo "27:55" "very useful so this is inserting")
% (find-baringervideo "27:58" "parenthesis now let's talk a bit about")
% (find-baringervideo "27:59" "navigation if for example I have the")
% (find-baringervideo "28:04" "cursor here at the beginning of the")
% (find-baringervideo "28:05" "defund I can use the functions show the")
% (find-baringervideo "28:11" "keys I have them bound to four words sex")
% (find-baringervideo "28:13" "pee and backward sex bean to move one")
% (find-baringervideo "28:19" "form at a time across the code so the")
% (find-baringervideo "28:24" "point is going to go after the defund")
% (find-baringervideo "28:25" "after the name of the function after the")
% (find-baringervideo "28:27" "entire argument list and now it's gonna")
% (find-baringervideo "28:30" "skip everything in that first and that")
% (find-baringervideo "28:33" "call to first all the way to the end of")
% (find-baringervideo "28:35" "the defund another useful tool Transpo's")
% (find-baringervideo "28:42" "sex pees let's say for example I had two")
% (find-baringervideo "28:48" "forms and then later on I realized that")
% (find-baringervideo "28:51" "I inverted the order I can hit transpose")
% (find-baringervideo "28:54" "xB and they're swapped and they're")
% (find-baringervideo "28:57" "swapped no matter how deeply no matter")
% (find-baringervideo "29:00" "what else is in here you can put what")
% (find-baringervideo "29:03" "all any kind of stuff I want and they're")
% (find-baringervideo "29:07" "transposed as complete entities okay")
% (find-baringervideo "29:12" "another very useful function is kill sex")
% (find-baringervideo "29:16" "beam this deletes the form immediately")
% (find-baringervideo "29:20" "after the point so for example if I have")
% (find-baringervideo "29:23" "point there where it is we can see it")
% (find-baringervideo "29:25" "the form immediately after point is this")
% (find-baringervideo "29:27" "if I hit kill sex beam the entire form")
% (find-baringervideo "29:31" "disappears no matter what it contains I")
% (find-baringervideo "29:33" "hit it again")
% (find-baringervideo "29:34" "get rid of foo now let's undo that and I")
% (find-baringervideo "29:38" "can give it a prefix art such as alt to")
% (find-baringervideo "29:41" "control")
% (find-baringervideo "29:42" "well alt to kill sex be and both of them")
% (find-baringervideo "29:44" "disappear")
% (find-baringervideo "29:47" "last thing I'm going to talk about if we")
% (find-baringervideo "29:50" "have a form we write for example two of")
% (find-baringervideo "29:54" "a and then we realize that we're missing")
% (find-baringervideo "29:56" "a well I can give a prefix parameter")
% (find-baringervideo "29:58" "such as alt 1/2 the open parenthesis")
% (find-baringervideo "30:01" "command and it wraps that many forms in")
% (find-baringervideo "30:05" "them in the parenthesis so you can see")
% (find-baringervideo "30:08" "for example this open paren C was added")
% (find-baringervideo "30:09" "as was this open parenthesis this last")
% (find-baringervideo "30:14" "one now I use these a lot so if you see")
% (find-baringervideo "30:19" "me jumping around and things just")
% (find-baringervideo "30:20" "appearing or moving it's due to its due")
% (find-baringervideo "30:25" "so finally we start running our function")
% (find-baringervideo "30:28" "so let's call it string to Morse it will")
% (find-baringervideo "30:33" "take a string and we're going to very")
% (find-baringervideo "30:36" "simply loop for car cross string")
% (find-baringervideo "30:45" "for morph and do character to morphs of")
% (find-baringervideo "30:52" "car what are we gonna do we're going to")
% (find-baringervideo "30:58" "write string morphs well we're missing a")
% (find-baringervideo "31:03" "place to write it so let's wrap this")
% (find-baringervideo "31:07" "with output to string call that Morse")
% (find-baringervideo "31:15" "indent let's go down")
% (find-baringervideo "31:22" "it's Morris this needs to be then")
% (find-baringervideo "31:24" "Moore's car Moore's car actually this")
% (find-baringervideo "31:31" "turns out to be useless let's just leave")
% (find-baringervideo "31:34" "that there we go")
% (find-baringervideo "31:37" "very simple let's compile the file then")
% (find-baringervideo "31:45" "let's try calling string to Morris let's")
% (find-baringervideo "31:51" "pass it my name well we're missing first")
% (find-baringervideo "31:55" "thing I notice is that after every")
% (find-baringervideo "32:01" "Moore's car we need to write a space so")
% (find-baringervideo "32:07" "let's recompile go back to the repple")
% (find-baringervideo "32:12" "recall it")
% (find-baringervideo "32:16" "see we're missing the output stream I")
% (find-baringervideo "32:20" "supposed to recombine the whole thing")
% (find-baringervideo "32:22" "I'm just going to use control all X now")
% (find-baringervideo "32:26" "the only problem that I can see it's")
% (find-baringervideo "32:29" "kinda ugly is this last space so how are")
% (find-baringervideo "32:40" "we gonna fix that")
% (find-baringervideo "32:48" "we need to not do that the last time")
% (find-baringervideo "32:55" "we'll do it this way")
% (find-baringervideo "33:03" "kill that")
% (find-baringervideo "33:06" "and then here we'll take care of the")
% (find-baringervideo "33:09" "initial character right string")
% (find-baringervideo "33:18" "- Morris of car Optimus and then nothing")
% (find-baringervideo "33:26" "and then here for every character will")
% (find-baringervideo "33:29" "write car space timorous recompile the")
% (find-baringervideo "33:33" "file - warnings well when we compile a")
% (find-baringervideo "33:39" "file and there are some warnings or")
% (find-baringervideo "33:41" "we get a compiler notes buffer like the")
% (find-baringervideo "33:44" "one you see here telling us what went")
% (find-baringervideo "33:46" "wrong and where so let's see here the")
% (find-baringervideo "33:50" "warning is the variable car is undefined")
% (find-baringervideo "33:55" "well that makes sense")
% (find-baringervideo "33:57" "so let's kill this notice that the form")
% (find-baringervideo "34:04" "to which the warning was related is")
% (find-baringervideo "34:06" "underlined in orange you get warnings")
% (find-baringervideo "34:08" "and orange airs in red Wow hey let's")
% (find-baringervideo "34:12" "introduce an error let's recompile")
% (find-baringervideo "34:14" "everything let's see what happens so")
% (find-baringervideo "34:18" "notice now we have one error zero")
% (find-baringervideo "34:21" "warnings from zero notes")
% (find-baringervideo "34:32" "not any warnings anymore I actually")
% (find-baringervideo "34:33" "wanted that warning you need that to me")
% (find-baringervideo "34:36" "make my point so let's introduce that")
% (find-baringervideo "34:39" "again so now we have one error two")
% (find-baringervideo "34:41" "warnings in one style warning notice")
% (find-baringervideo "34:43" "that when there are more than one when")
% (find-baringervideo "34:45" "there's more than one warning or error")
% (find-baringervideo "34:46" "we get a tree buffer like this one but")
% (find-baringervideo "34:50" "we can go and we can look so let's take")
% (find-baringervideo "34:51" "care of let's first take care of the")
% (find-baringervideo "34:52" "warnings this variables undefined if we")
% (find-baringervideo "34:58" "hit let me move the point away here if")
% (find-baringervideo "35:03" "we're at the warning and we hit enter it")
% (find-baringervideo "35:07" "jumps us to the point in the file in the")
% (find-baringervideo "35:09" "buffer where the error occurred so let's")
% (find-baringervideo "35:12" "go here that's adding that a ref string")
% (find-baringervideo "35:17" "zero now let's look at the style warning")
% (find-baringervideo "35:23" "the string the variable string is")
% (find-baringervideo "35:26" "defined but never used that's not quite")
% (find-baringervideo "35:30" "correct it's probably due to this error")
% (find-baringervideo "35:33" "tell if the error in macro expansion of")
% (find-baringervideo "35:36" "loop well let's go here now I introduced")
% (find-baringervideo "35:42" "that error so obviously I know what's")
% (find-baringervideo "35:44" "wrong but let's pretend we didn't")
% (find-baringervideo "35:46" "realize what was wrong we've got a")
% (find-baringervideo "35:48" "couple options we can go look at the")
% (find-baringervideo "35:50" "documentation for loop open up the Hydra")
% (find-baringervideo "35:54" "spec on loop control C control D H we")
% (find-baringervideo "35:59" "can jump to the source code definition")
% (find-baringervideo "36:01" "of loop with all dot well we can't")
% (find-baringervideo "36:04" "because loop is compiled without source")
% (find-baringervideo "36:06" "code definition we could generally")
% (find-baringervideo "36:08" "speaking we can try and describe the")
% (find-baringervideo "36:11" "symbol and see if there's any")
% (find-baringervideo "36:13" "documentation associate with the macro")
% (find-baringervideo "36:14" "function in this case there isn't so we")
% (find-baringervideo "36:18" "could do now is we could try just macro")
% (find-baringervideo "36:19" "expanding it and see what happens well")
% (find-baringervideo "36:23" "ctrl C ret macro expand one takes the")
% (find-baringervideo "36:27" "form currently under the the cursor and")
% (find-baringervideo "36:30" "simply calls matter expand one on it and")
% (find-baringervideo "36:34" "of course in this case we get into an")
% (find-baringervideo "36:36" "inner buffer because it wasn't able to")
% (find-baringervideo "36:37" "macro expand it compound form was")
% (find-baringervideo "36:39" "expected before was found blah blah blah")
% (find-baringervideo "36:42" "let's abort")
% (find-baringervideo "36:44" "let's fix that by removing the do now")
% (find-baringervideo "36:48" "let's try macro expanding again and")
% (find-baringervideo "36:50" "notice that this time we get the code so")
% (find-baringervideo "36:54" "thanks for working its quit")
% (find-baringervideo "36:56" "let's try compiling the whole file again")
% (find-baringervideo "37:01" "zero warning zero errors zero notes good")
% (find-baringervideo "37:05" "string two Morse beautiful m-i no this")
% (find-baringervideo "37:10" "is a and I'm just gonna trust these are")
% (find-baringervideo "37:11" "our C and O so now we have string two")
% (find-baringervideo "37:15" "more it's working let's try and write")
% (find-baringervideo "37:22" "Morse to string we're gonna assume that")
% (find-baringervideo "37:27" "string is a list a string of dots and")
% (find-baringervideo "37:31" "dashes separated by spaces so the first")
% (find-baringervideo "37:34" "thing we need to do is to mean to split")
% (find-baringervideo "37:36" "string into all the different characters")
% (find-baringervideo "37:39" "well how are we gonna do that I'm not")
% (find-baringervideo "37:42" "gonna sit down and write the code for")
% (find-baringervideo "37:43" "splitting string what I'm gonna do is")
% (find-baringervideo "37:46" "I'm gonna download it off the internet")
% (find-baringervideo "37:49" "we're gonna load up something called")
% (find-baringervideo "37:51" "asdf install this is a tool built on")
% (find-baringervideo "37:53" "asdf which allows you to install")
% (find-baringervideo "37:57" "automatically")
% (find-baringervideo "37:58" "comment-list libraries just by running")
% (find-baringervideo "38:03" "asdf install split sequence so let's let")
% (find-baringervideo "38:09" "that go ask me where do you want to")
% (find-baringervideo "38:11" "install well I don't have write")
% (find-baringervideo "38:14" "permissions now I do have my permissions")
% (find-baringervideo "38:17" "there well we're gonna do a personal")
% (find-baringervideo "38:19" "installation anyway so download it no")
% (find-baringervideo "38:23" "key found for key ID unless you have a")
% (find-baringervideo "38:26" "copy of the public key of whoever wrote")
% (find-baringervideo "38:28" "the software you're always going to get")
% (find-baringervideo "38:29" "this error if you have faith you")
% (find-baringervideo "38:32" "shouldn't but if you do you can just run")
% (find-baringervideo "38:34" "the Skip gbg check restart so I'm gonna")
% (find-baringervideo "38:37" "do now zero and you know unpack it'll")
% (find-baringervideo "38:41" "compile and it'll load the source how do")
% (find-baringervideo "38:44" "I know it's loaded well let's have a")
% (find-baringervideo "38:47" "look")
% (find-baringervideo "38:48" "and let's find yes see if the split")
% (find-baringervideo "38:50" "sequence package exists it does now I")
% (find-baringervideo "38:53" "don't really remember much about split")
% (find-baringervideo "38:55" "sequence I know it splits sequences but")
% (find-baringervideo "38:58" "I don't know what functions are")
% (find-baringervideo "38:59" "available let's inspect the package so")
% (find-baringervideo "39:05" "what I did is I called up the slime")
% (find-baringervideo "39:07" "inspector and I passed it the split")
% (find-baringervideo "39:09" "sequence package well it's a package")
% (find-baringervideo "39:12" "obviously it's this is its name its name")
% (find-baringervideo "39:15" "is a string it has a nickname it uses")
% (find-baringervideo "39:18" "the common list package it is not used")
% (find-baringervideo "39:21" "by any other symbols any other packages")
% (find-baringervideo "39:24" "and it has six external symbols and 35")
% (find-baringervideo "39:27" "internal symbols I don't know how this")
% (find-baringervideo "39:29" "looks in the movie but if you can tell")
% (find-baringervideo "39:32" "this text here here and here")
% (find-baringervideo "39:36" "is a slightly blue gray color if I hit")
% (find-baringervideo "39:40" "enter when the cursor is on that text I")
% (find-baringervideo "39:42" "inspect recursively whatever the text")
% (find-baringervideo "39:47" "represents in this case I'm going to hit")
% (find-baringervideo "39:49" "enter on the six external symbols and I")
% (find-baringervideo "39:53" "get a list of symbols so what I'm")
% (find-baringervideo "39:57" "interested in is probably split sequence")
% (find-baringervideo "40:00" "I'm gonna hit enter again this is the")
% (find-baringervideo "40:02" "symbol split sequence its name it's")
% (find-baringervideo "40:06" "bound to a function and here's its")
% (find-baringervideo "40:08" "documentation as a function we're gonna")
% (find-baringervideo "40:13" "read this for a second")
% (find-baringervideo "40:17" "okay this looks like what I want so let")
% (find-baringervideo "40:20" "me quit the inspector jump back to the")
% (find-baringervideo "40:23" "list file split sequence split sequence")
% (find-baringervideo "40:31" "the delimiter is space the sequence is")
% (find-baringervideo "40:36" "string now this returns a list so what I")
% (find-baringervideo "40:40" "want to do with this now I want to loop")
% (find-baringervideo "40:43" "over this list and for each one I want")
% (find-baringervideo "40:51" "to write the car what character well I")
% (find-baringervideo "40:55" "have the Moores so I need the Moores to")
% (find-baringervideo "40:58" "character of the Moores card and again I")
% (find-baringervideo "41:04" "need to write this to a dream we're")
% (find-baringervideo "41:11" "gonna call this character stream now")
% (find-baringervideo "41:14" "we're gonna jump out wrap this with")
% (find-baringervideo "41:17" "output string call this character stream")
% (find-baringervideo "41:22" "jump out reinvent the whole thing")
% (find-baringervideo "41:26" "oops typo yeah let's try recompiling the")
% (find-baringervideo "41:32" "file no errors no warnings no notes")
% (find-baringervideo "41:37" "let's go back here we said that string")
% (find-baringervideo "41:42" "timorous worked")
% (find-baringervideo "41:43" "so let's now call more string gonna go")
% (find-baringervideo "41:48" "and actually just for fun I'm gonna grab")
% (find-baringervideo "41:50" "an older output if I can find one way")
% (find-baringervideo "41:55" "back here then I'm gonna grab this one")
% (find-baringervideo "41:58" "and I'm gonna call them morphs of string")
% (find-baringervideo "42:02" "on that so I get an error")
% (find-baringervideo "42:07" "let's have a look at Morse to string we")
% (find-baringervideo "42:11" "see it the more scar is the empty list")
% (find-baringervideo "42:14" "see it right here I'm sorry not the ng")
% (find-baringervideo "42:20" "list is an empty string that shouldn't")
% (find-baringervideo "42:23" "happen I'm going to use V to jump to the")
% (find-baringervideo "42:27" "source code more string if I haven't")
% (find-baringervideo "42:29" "already talked about being sorry I don't")
% (find-baringervideo "42:31" "remember okay")
% (find-baringervideo "42:32" "V will jump to the source for a")
% (find-baringervideo "42:34" "particular frame so there we go")
% (find-baringervideo "42:39" "so this is returning the empty string")
% (find-baringervideo "42:42" "okay the problem is this let's try to")
% (find-baringervideo "42:47" "remove empty sub sweet so the first")
% (find-baringervideo "42:53" "thing we do is we're gonna test about")
% (find-baringervideo "42:56" "the first thing we're gonna do is we're")
% (find-baringervideo "42:57" "gonna close this debugger buffer")
% (find-baringervideo "42:59" "we're gonna go back to our list of code")
% (find-baringervideo "43:01" "and I'm gonna remove this string and I'm")
% (find-baringervideo "43:06" "gonna put in I'm gonna perform a quick")
% (find-baringervideo "43:08" "little test take this I'm gonna paste it")
% (find-baringervideo "43:15" "here and I'm going to use control X")
% (find-baringervideo "43:16" "control E which we said before evaluates")
% (find-baringervideo "43:19" "the last expression immediately before")
% (find-baringervideo "43:21" "the cursor I noticed that evaluating")
% (find-baringervideo "43:25" "with this string and passing the new")
% (find-baringervideo "43:29" "remove empty sub sweets parameter")
% (find-baringervideo "43:31" "returns a list of more characters just")
% (find-baringervideo "43:35" "for fun see what it was returning before")
% (find-baringervideo "43:38" "okay this was the problem there was a")
% (find-baringervideo "43:41" "final empty string so that's good let's")
% (find-baringervideo "43:45" "recompile the file")
% (find-baringervideo "43:51" "one style warning")
% (find-baringervideo "43:54" "well it's redefining a bunch of")
% (find-baringervideo "43:56" "characters since when you're in a buffer")
% (find-baringervideo "44:01" "which has style warnings or notes errors")
% (find-baringervideo "44:07" "warnings whatever they may be you can")
% (find-baringervideo "44:08" "use all ten adult pee slime next note")
% (find-baringervideo "44:10" "and slime prep note to jump directly to")
% (find-baringervideo "44:14" "the note and when you do jump to the")
% (find-baringervideo "44:16" "note you get a variable you get a string")
% (find-baringervideo "44:18" "here and there any buffer telling you")
% (find-baringervideo "44:20" "what went wrong the variable string is")
% (find-baringervideo "44:23" "to find but never used that makes")
% (find-baringervideo "44:26" "complete sense let's kill that let's")
% (find-baringervideo "44:29" "recompile the file again Wow more string")
% (find-baringervideo "44:37" "just ignore that thing before let's try")
% (find-baringervideo "44:44" "it see")
% (find-baringervideo "44:47" "let's call string timorous let's see")
% (find-baringervideo "44:51" "what happens well that looks good that's")
% (find-baringervideo "44:57" "you don't per taste it that makes sense")
% (find-baringervideo "44:59" "all of our characters were an upper case")
% (find-baringervideo "45:00" "we lose case information but maybe it")
% (find-baringervideo "45:05" "was just a strange coincidence")
% (find-baringervideo "45:06" "and maybe string timorous was actually")
% (find-baringervideo "45:09" "returning something else that just by")
% (find-baringervideo "45:11" "chance morphs to string converted back")
% (find-baringervideo "45:14" "into mark oh well I'm going to use alt")
% (find-baringervideo "45:17" "dot again to jump to the source code")
% (find-baringervideo "45:19" "string timorous Here I am what I'm going")
% (find-baringervideo "45:23" "to do here is I'm going to use ctrl c")
% (find-baringervideo "45:26" "ctrl T to start tracing string to Morse")
% (find-baringervideo "45:31" "string to Morse an app traced let's jump")
% (find-baringervideo "45:34" "to the repple just for fun I'm going to")
% (find-baringervideo "45:37" "trace Morse to string as well")
% (find-baringervideo "45:41" "she control C control team or string")
% (find-baringervideo "45:44" "back to the repple now let's call this")
% (find-baringervideo "45:49" "and notice that we also got trace output")
% (find-baringervideo "45:52" "so string timorous returned this calling")
% (find-baringervideo "45:56" "morse to string with this return that so")
% (find-baringervideo "45:58" "now we can be fairly confident that our")
% (find-baringervideo "46:02" "functions work as we want them to")
% (find-baringervideo "46:14" "shucks back to this file")
% (find-baringervideo "46:19" "so let's just resize things briefly oK")
% (find-baringervideo "46:22" "we've seen the repple we've seen most of")
% (find-baringervideo "46:23" "the major features of the rebel we've")
% (find-baringervideo "46:27" "seen the slime debugger I'm gonna pop")
% (find-baringervideo "46:29" "that up again by passing in a number")
% (find-baringervideo "46:34" "we're seeing this line debugger all")
% (find-baringervideo "46:37" "these different frames we've seen what")
% (find-baringervideo "46:40" "you can do with each frame we've seen")
% (find-baringervideo "46:45" "the various ways that we can send code")
% (find-baringervideo "46:48" "from Emacs to Lisp")
% (find-baringervideo "46:51" "okay we've seen the various ways to")
% (find-baringervideo "46:53" "inspect the running image to figure out")
% (find-baringervideo "46:56" "what functions are available how they're")
% (find-baringervideo "46:58" "called whether documentation string is")
% (find-baringervideo "47:01" "what they macro expand to where they're")
% (find-baringervideo "47:03" "defined")
% (find-baringervideo "47:12" "now there are just two more ends bits")
% (find-baringervideo "47:16" "and pieces that I'm gonna then I'm going")
% (find-baringervideo "47:20" "to show you the first is just a very")
% (find-baringervideo "47:26" "useful feature that's kind of hard to")
% (find-baringervideo "47:27" "use if you don't know it exists let's")
% (find-baringervideo "47:31" "find one of these that has an")
% (find-baringervideo "47:32" "interesting object or some value of")
% (find-baringervideo "47:34" "interesting here we go this stack frame")
% (find-baringervideo "47:37" "has a value in its local whose printed")
% (find-baringervideo "47:41" "representation is more or less useless")
% (find-baringervideo "47:43" "doesn't tell us much about what it is")
% (find-baringervideo "47:44" "well if we go here and we hit enter we")
% (find-baringervideo "47:48" "get sent to an inspector which is")
% (find-baringervideo "47:51" "inspecting the current value of that")
% (find-baringervideo "47:54" "local in the call stack")
% (find-baringervideo "48:05" "this can be very useful when we have an")
% (find-baringervideo "48:08" "error and we don't know what went wrong")
% (find-baringervideo "48:09" "and we want to see what the values of")
% (find-baringervideo "48:13" "the data we're working with is and why")
% (find-baringervideo "48:15" "the air could have been caused another")
% (find-baringervideo "48:18" "thing we can do if we use AI is we can")
% (find-baringervideo "48:24" "inspect not only the objects which are")
% (find-baringervideo "48:28" "already on the call stack but the value")
% (find-baringervideo "48:31" "of executing any form within the context")
% (find-baringervideo "48:35" "of that frame what does that mean this")
% (find-baringervideo "48:38" "means that if there any special or")
% (find-baringervideo "48:39" "dynamic variables that are bound and I")
% (find-baringervideo "48:41" "hit eat here I can now access those")
% (find-baringervideo "48:44" "variables with the value they have in")
% (find-baringervideo "48:47" "that call stack so for example trying to")
% (find-baringervideo "48:52" "think of something that could be")
% (find-baringervideo "48:53" "different let's try package actually")
% (find-baringervideo "48:56" "let's move sufficiently far out let's go")
% (find-baringervideo "48:59" "all the way out to here and let's")
% (find-baringervideo "49:04" "evaluate an inspect")
% (find-baringervideo "49:06" "package I'll package is still Morse so I")
% (find-baringervideo "49:11" "can't come up with a good example")
% (find-baringervideo "49:15" "actually I think I probably can")
% (find-baringervideo "49:27" "now let's go to the red one well that's")
% (find-baringervideo "49:30" "busy well we can go here okay so suffice")
% (find-baringervideo "49:37" "to say that if you need to inspect if")
% (find-baringervideo "49:40" "you need to if you want to calculate")
% (find-baringervideo "49:43" "something okay as if you were you as if")
% (find-baringervideo "49:46" "you had a rebel tied to this code okay")
% (find-baringervideo "49:50" "you just hit me")
% (find-baringervideo "49:51" "sorry naughty hit I by mistake and you")
% (find-baringervideo "49:58" "can write anything you want in here okay")
% (find-baringervideo "50:05" "now let's abort this and the super")
% (find-baringervideo "50:10" "inspector we closed our inspector")
% (find-baringervideo "50:19" "to jump a moment back to on this code")
% (find-baringervideo "50:24" "last thing we're going to talk about is")
% (find-baringervideo "50:26" "the cross-reference facility this case")
% (find-baringervideo "50:32" "is so example so this example is so")
% (find-baringervideo "50:35" "simple but I can just look at it and I")
% (find-baringervideo "50:37" "know exactly what's going on but let's")
% (find-baringervideo "50:42" "say I had these functions spread over")
% (find-baringervideo "50:45" "many directories in many files and I")
% (find-baringervideo "50:48" "want to add a new required parameter to")
% (find-baringervideo "50:52" "Morse to string for example an encoding")
% (find-baringervideo "50:59" "parameter what I need to do now is I")
% (find-baringervideo "51:02" "need to update everyone who calls Morse")
% (find-baringervideo "51:04" "to string how can I find out who calls")
% (find-baringervideo "51:08" "Morse to string slime list callers ctrl")
% (find-baringervideo "51:13" "C less than which I'm gonna do right now")
% (find-baringervideo "51:19" "no references found for Morse to string")
% (find-baringervideo "51:22" "oh well he's right there are no")
% (find-baringervideo "51:26" "references found for Morse to string")
% (find-baringervideo "51:28" "let's try Morse to character which I")
% (find-baringervideo "51:30" "know is called someplace here we go")
% (find-baringervideo "51:31" "tells me the file name and it tells me")
% (find-baringervideo "51:35" "where it's called the output isn't")
% (find-baringervideo "51:39" "perfect here but I don't know why and")
% (find-baringervideo "51:41" "we're not going to debug it now I hit")
% (find-baringervideo "51:43" "space notice that it opens up the file")
% (find-baringervideo "51:46" "and it sends the buffer it sends me")
% (find-baringervideo "51:49" "directly to the forum that calls Morse")
% (find-baringervideo "51:52" "to character at the same time I can ask")
% (find-baringervideo "51:56" "Morse to character who do you call slime")
% (find-baringervideo "52:00" "list Colley's ctrl C greater than so")
% (find-baringervideo "52:05" "these are all the functions met Morse to")
% (find-baringervideo "52:08" "character calls they're all unresolved")
% (find-baringervideo "52:10" "this means that SB CL doesn't know the")
% (find-baringervideo "52:12" "file name you'll notice that they're all")
% (find-baringervideo "52:15" "internal well internals so to speak")
% (find-baringervideo "52:18" "they're all part of SB CL itself and so")
% (find-baringervideo "52:20" "they've been cop compiled with certain")
% (find-baringervideo "52:24" "compiler settings if I how it would go")
% (find-baringervideo "52:26" "to more string will see greater than")
% (find-baringervideo "52:29" "notice that it tells me that I call")
% (find-baringervideo "52:31" "split sequence and")
% (find-baringervideo "52:32" "where I call it and it tells me that I")
% (find-baringervideo "52:35" "call Morse to character and it tells me")
% (find-baringervideo "52:36" "where I call it if I hit space here on")
% (find-baringervideo "52:39" "split sequence and if I'm patient")
% (find-baringervideo "52:48" "take nap here drink some water it sends")
% (find-baringervideo "52:54" "me to the place that calls to the")
% (find-baringervideo "52:57" "definition I'm sign of split sequence so")
% (find-baringervideo "53:04" "let's jump back to this buffer don't")
% (find-baringervideo "53:07" "need this anymore so that's the useful")
% (find-baringervideo "53:12" "cross-reference facility")
% (find-baringervideo "53:25" "well I think this sums up this")
% (find-baringervideo "53:29" "introduction I hope you think slime is")
% (find-baringervideo "53:32" "cool you know honesty slime kicks ass")
% (find-baringervideo "53:37" "if you have any questions the guys on")
% (find-baringervideo "53:40" "slime devel will be more than happy to")
% (find-baringervideo "53:42" "help you out features are added more or")
% (find-baringervideo "53:47" "less constantly there are a couple")
% (find-baringervideo "53:50" "features that I haven't even begun to")
% (find-baringervideo "53:52" "mention slime has some support for")
% (find-baringervideo "53:55" "dealing with multiple threat")
% (find-baringervideo "53:56" "applications which I haven't talked")
% (find-baringervideo "53:58" "about slime has support for running")
% (find-baringervideo "54:01" "multiple lisps simultaneously very")
% (find-baringervideo "54:04" "useful when porting code and I just")
% (find-baringervideo "54:09" "suggest that you go to the website and")
% (find-baringervideo "54:11" "have a look meet the mailing list and")
% (find-baringervideo "54:13" "you'll see for yourself well thank you")
% (find-baringervideo "54:17" "very much I want to thank the guys from")
% (find-baringervideo "54:19" "the University of Pavia and Muppets lab")
% (find-baringervideo "54:21" "for the machine I want to remind you")
% (find-baringervideo "54:23" "again that all the work we did in this")
% (find-baringervideo "54:25" "video was done on a remote machine")
% (find-baringervideo "54:29" "you'll notice sorry if I add one more")
% (find-baringervideo "54:33" "thing I think I haven't yet told you how")
% (find-baringervideo "54:35" "to quit I'm not going to I'm evil what")
% (find-baringervideo "54:41" "you can do is slime disconnect what this")
% (find-baringervideo "54:46" "does is this closes down the connection")
% (find-baringervideo "54:48" "between Emacs and swank but leaves well")
% (find-baringervideo "54:55" "except for the fact that I've")
% (find-baringervideo "55:04" "well well anyway you know what there was")
% (find-baringervideo "55:09" "a good reason why I didn't tell you how")
% (find-baringervideo "55:10" "to quit slime and it's Bend and the Lisp")
% (find-baringervideo "55:17" "so thanks and I hope you enjoyed it")




#####
#
# slime-from-melpa
# 2022jul30
#
#####

# «slime-from-melpa»  (to ".slime-from-melpa")
# https://github.com/slime/slime
# loaddefs-generate: Search failed: "\f"

https://github.com/slime/slime



#####
#
# slime-git
# 2022jul30
#
#####

# «slime-git»  (to ".slime-git")
# https://slime.common-lisp.dev/doc/html/Installation.html#Installing-from-Git
# (find-git-links "https://github.com/slime/slime" "slime")
# (code-c-d "slime" "~/usrc/slime/" "/usr/local/info/slime")
# (find-slimefile "")
# (find-slimefile "README.md")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
~/usrc/slime/doc/
sudo make uninstall-info  |& tee omu
sudo make install-info    |& tee omi

# (find-slimenode "")
# (find-slimenode "Loading Swank faster")
# (find-slimenode "Finding definitions")
# (add-to-list 'load-path "~/usrc/slime/")
# (require 'slime-autoloads)
# (setq inferior-lisp-program "sbcl")




#####
#
# slime
# 2007mar17
#
#####

# «slime»  (to ".slime")
# (find-angg ".emacs" "slime")
# http://common-lisp.net/project/slime/
# http://common-lisp.net/project/slime/slime-2.0.tgz
#*
rm -Rv ~/usrc/slime-2.0/
tar -C ~/usrc/ -xvzf \
  $S/http/common-lisp.net/project/slime/slime-2.0.tgz
cd     ~/usrc/slime-2.0/

#*
# (code-c-d "slime" "~/usrc/slime-2.0/")
# (find-slimefile "")
# (find-slimefile "README")
# (find-slimefile "README" "Add this to your ~/.emacs")

# http://dto.freeshell.org/e/init.el
# (find-dtoefile "init.el" "(@* \"slime\")")




#####
#
# slime from the CVS
# 2010jul30
#
#####

# «slime-cvs»  (to ".slime-cvs")
# (find-node "(slime)Top")
# (find-node "(slime)Installation" ".emacs")
# (find-node "(slime)Autoloading")
# (find-sh "locate slime")
# (find-node "(slime)CVS Incantations")
#*
rm -Rv ~/usrc/slime/
mkdir  ~/usrc/slime/
cd     ~/usrc/
export CVSROOT=:pserver:[email protected]:/project/slime/cvsroot
cvs login
  cvs checkout                 slime
# cvs checkout -rFAIRLY-STABLE slime
cd     ~/usrc/slime/
  tar -cvzf ~/tmp/slime-cvs.tgz .
# tar -cvzf ~/tmp/slime-cvs-fairly-stable.tgz .

#*
rm -Rv ~/usrc/slime/
mkdir  ~/usrc/slime/
tar -C ~/usrc/slime/ -xvzf ~/tmp/slime-cvs.tgz
cd     ~/usrc/slime/
cd     ~/usrc/slime/doc/
touch contributors.texi
makeinfo slime
cp -v slime.info ~/info/

#*
http://common-lisp.net/project/slime/
http://common-lisp.net/project/slime/snapshots/slime-current.tgz

#*
# (code-c-d "slime" "~/usrc/slime/" "slime")
# (find-slimefile "")
# (find-slimefile "doc/")
# (find-slimefile "slime-autoloads.el" "CONTRIBS is a list")
# (find-slimefile "slime.el"           "CONTRIBS is a list")
# (find-slimegrep "grep -nrH -e autodoc *")
# (find-slimegrep "grep -nrH -e :autodoc *")
# (find-slimegrep "grep -nrH -e slime-eval *")
# (find-slimefile "contrib/slime-autodoc.el" "swank:autodoc")

(defun slime-setup (&rest args)
  (if (> (length args) 1) (debug))
  (apply 'slime-setup-orig args))


# (find-slimenode "Top")
# (find-slimenode "Inferior-lisp")
# (find-slimenode "REPL")
# (find-slimegrep "REPL")
# (find-slimenode "Multiple Lisps")

;; «slime-cvs-run»  (to ".slime-cvs-run")
;; (find-slimenode "Installation")
;; (find-evariable 'inferior-lisp-program)
;;
(setq inferior-lisp-program "lisp")
(setq inferior-lisp-program "/usr/bin/gcl")
(setq inferior-lisp-program "/usr/bin/sbcl")
(setq inferior-lisp-program "gcl")
(add-to-list 'load-path "~/usrc/slime/")

;; (progn (require 'slime) (message "foo"))
(require 'slime)
(slime-setup)

# (find-slimefile "slime.el" "CONTRIBS is a list")

(message "9002")

(run-hooks 'slime-load-hook)

(setq seen nil)
;; (find-evardescr 'seen)

;; (find-slimefile "slime.el")



<tcr> minion: logs
<minion> logs: #lisp logs are available at
         http://ccl.clozure.com/irc-logs/lisp/ (since 2008-09) and
         http://tunes.org/~nef/logs/lisp/ (since 2000)

http://ccl.clozure.com/irc-logs/lisp/2010-07/lisp-2010.07.31.txt



#####
#
# eepitch-slime
# 2022jul30
#
#####

# «eepitch-slime»  (to ".eepitch-slime")
# (find-fline "~/LOGS/2022jul30.lisp" "(slime-repl-buffer 'create)")
# (find-efunction 'eepitch-slime)
# (find-efunction 'slime)
# (find-efunction 'slime-repl)
# (find-efunction 'slime-switch-to-output-buffer)
# (find-efunction 'slime-setup)
# (find-efunction 'slime-start)
# (find-efunction 'slime-start*)
# (find-efunction 'slime-lisp-options)
# (find-efunction 'slime-lookup-lisp-implementation)
# (find-slimegrep "grep --color=auto -nH --null -e slime-start *.el")
# (find-slimegrep "grep --color=auto -nH --null -e slime-maybe-start-lisp *.el")
# (find-slimegrep "grep --color=auto -nH --null -e 'Create an additional' *.el")
# (find-slimefile "")
# (find-efunction 'slime-reinitialize-inferior-lisp-p)
# (find-evardescr 'slime-lisp-implementations)
# (find-evariable 'slime-lisp-implementations)
# (find-efunction 'slime-init-command)

(setq aaa (y-or-n-p "Create an additional *inferior-lisp*? "))
aaa

(slime-start)

(defun slime-reinitialize-inferior-lisp-p (program program-args env buffer)
  (let ((args (slime-inferior-lisp-args (get-buffer-process buffer))))
    (and (equal (plist-get args :program) program)
         (equal (plist-get args :program-args) program-args)
         (equal (plist-get args :env) env)
         (not (y-or-n-p "Create an additional *inferior-lisp*? ")))))

(defun slime-reinitialize-inferior-lisp-p (program program-args env buffer)
  nil)



(setq slime-lisp-implementations '((sbcl ("sbcl") :init slime-init-command)))

              (slime-repl-buffer 'create)
(find-ebuffer (slime-repl-buffer 'create))



# (find-eapropos "^slime-.*buffer")
# (find-eapropos "^slime-.*connect")
# (find-eapropos "^slime-repl")
# (slime-buffer-name)

(slime-buffer-name :apropos)
(slime-buffer-name :cheat-sheet)
(slime-buffer-name :compilation)
(slime-buffer-name :connections)
(slime-buffer-name :description)
(slime-buffer-name :error)
(slime-buffer-name :events)
(slime-buffer-name :inspector)
(slime-buffer-name :macroexpansion)
(slime-buffer-name :source)
(slime-buffer-name :threads)
(slime-buffer-name :xref)


* (eepitch-slime)
* (eepitch-kill)
* (eepitch-slime)


* (eepitch-slime)
* (eepitch-kill)
* (eepitch-slime)
(+ 1 2)
(+ 1
  2)

* (eepitch-slime)
* (eepitch-kill)
* (eepitch-slime)
(uiop:run-program "ls -l" :output :lines)

cl-user> (let* ((process  (uiop:launch-program "lrev" :input :stream :output :stream))
                (producer (bt:make-thread
                           (lambda ()
                             (with-input-from-string (inp "a
bb
ccc
")
                               (uiop:copy-stream-to-stream inp (uiop:process-info-input process)))
                             (finish-output (uiop:process-info-input process))
                             (close (uiop:process-info-input process))
                             (sleep 1))))
                (consummer (bt:make-thread
                            (lambda ()
                              (uiop:slurp-stream-string (uiop:process-info-output process))))))
           (values (bt:join-thread producer)
                   (bt:join-thread consummer)))
nil
"ccc
bb
a
"
cl-user> 




#####
#
# Sly is Sylvester the Cat's Common Lisp IDE.
# 2021dec17
#
#####

# «sly»  (to ".sly")
# (find-angg ".emacs" "sly")
# (find-eev "eepitch.el" "eepitch-sly")
# (find-slynode "")
# https://github.com/joaotavora/sly/issues/527
# (find-maximagitfile "src/init-cl.lisp")
# (find-maximagitfile "src/maxima.asd")
# (find-maximagitfile "src/mlisp.lisp" "(defmspec $dispfun ")
# (find-maximagitfile "src/mlisp.lisp" "(defun dispfun1 ")

# (find-epackage-links 'sly "sly" t)
# (find-epackage       'sly)
# (code-c-d "sly" "~/.emacs.d/elpa/sly-20221108.2234/" "sly")
# (find-slyfile "")
# https://github.com/joaotavora/sly
# https://github.com/joaotavora/sly/issues
# (find-slynode "Top")
# (find-node "(sly)Top")

# (find-efunctiondescr 'sly-mrepl)
# (find-efunction      'sly-mrepl)

# (find-maximagitfile "src/init-cl.lisp")

(defun eepitch-sly () (eepitch '(find-ebuffer (sly-mrepl))))

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(load "~/bigsrc/maxima/src/init-cl.lisp")
(load "~/bigsrc/maxima/src/maxima.asd")

(let ((asdf:*central-registry*
       (cons #P"~/bigsrc/maxima/src/"
             asdf:*central-registry*)))
  (asdf:load-system :maxima))

(load "~/bigsrc/maxima/src/mlisp.lisp")
(ql:register-local-projects)
(ql:quickload :maxima)


~/bigsrc/maxima/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
laf ~/quicklisp/
laf    ~/quicklisp/local-projects/
rm -fv ~/quicklisp/local-projects/maxima
cd     ~/quicklisp/local-projects/
ln -s ~/bigsrc/maxima .
laf

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(ql:register-local-projects)
;; (find-fline "~/quicklisp/local-projects/")

laf    ~/quicklisp/local-projects/

$QUICKLISP_DIR/local-projects/maxima/,
        then in the mrepl run (ql:register-local-projects)




#####
#
# my-sly-wait
# 2022dec28
#
#####

# «my-sly-wait»  (to ".my-sly-wait")
# https://github.com/joaotavora/sly/issues/550
# Need help to write a function my-sly-wait (for eepitch)

Hi people,

is this a good place to ask for help? The manual mentions a sly-devel
mailing list, but I couldn't find it...

I am trying to make eepitch[1] work with Sly. I wrote the code below,
and it needs a fix in the line with the "TODO: fix this". I need to
replace the

  (save-window-excursion (sly))

by this,

  (save-window-excursion (sly) (my-sly-wait))

where the (my-sly-wait) only returns after the Sly connection is
established and the (sly-mrepl--find-buffer) buffer is ready... how do
I write that (my-sly-wait)?

If anyone wants to know why I need this, this reason is because I need
to make (find-slyprocess) be a "shell-like function" in the sense of
[2]: it shouldn't change anything in the current window configuration
besides the buffer in the current window, that should become the
(sly-mrepl--find-buffer) buffer... and I think that adding a
"(my-sly-wait)" would be the easiest way to achieve that.

The links are:

[1] http://angg.twu.net/eepitch.html
[2] http://angg.twu.net/eev-intros/find-eepitch-intro.html#2.3

and my current code is below. Thanks in advance! =)

(defun find-slyprocess-reuse ()
  "Go to a Sly REPL buffer (when we want to reuse an old one).
This is an internal function used by `find-slyprocess'."
  (find-ebuffer (sly-mrepl--find-buffer) :end))

(defun find-slyprocess-create ()
  "Go to a Sly REPL buffer (when we want to create a new one).
This is an internal function used by `find-slyprocess'."
  (let ((sly-command-switch-to-existing-lisp 'never)
	(sly-auto-select-connection 'never)
	(sly-lisp-implementations '((sbcl ("sbcl"))))
	(sly-default-lisp 'sbcl))
    (save-window-excursion (sly))	; TODO: fix this
    (find-slyprocess-reuse)))

(defun find-slyprocess ()
  "Go to a Sly REPL buffer, This function is used by `eepitch-sly'."
  (interactive)
  (require 'sly)
  (sly-setup)
  (if (and (sly-current-connection)
	   (sly-mrepl--find-buffer))
      (find-slyprocess-reuse)
    (find-slyprocess-create)))

(defun eepitch-sly () (interactive)
  (eepitch '(find-slyprocess)))




#####
#
# How do I wait, or sit-for, until a hook is run?
# 2022dec29
#
#####

# «my-sly-wait-email»  (to ".my-sly-wait-email")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-12/msg00739.html Edrx 1
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-12/msg00775.html Edrx 2
# How do I wait, or sit-for, until a hook is run?

Hi list,

I am trying to write a function (my-sly-wait) that can be put here,

  (save-window-excursion (sly) (my-sly-wait))

and that only returns when the hook `sly-mrepl-hook' is run...

How do I write that? Or, if I can ask for something nicer... how do I
write a function like that that waits for at most 30 seconds
displaying all output like a `sit-for' (?), and returns without errors
if the hook `sly-mrepl-hook' is run, but yields an error if that hook
is not run in 30 seconds?

I spent some time trying to figure out how to do that using
`add-hook', `remove-hook', `catch', `throw', `unwind-protect' and
`sit-for', and then I realized that if I asked this question here then
probably someone would answer with "look at code for foo in the
package bar"...

  Thanks in advance!
    Eduardo Ochs
    http://angg.twu.net/#eev

P.S.: my reasons for wanting/needing that are here:
https://github.com/joaotavora/sly/issues/550




#####
#
# sly-teardown
# 2024sep05
#
#####

# «sly-teardown»  (to ".sly-teardown")
# (find-eapropos "sly.*kill")
# (find-eapropos "sly.*mrepl")
# (find-eapropos "sly.*mrepl.*teardown")




#####
#
# sly-connected-hook
# 2022dec29
#
#####

# «sly-connected-hook»  (to ".sly-connected-hook")
# (find-fline "~/LOGS/2022dec29.emacs" "sly-connected-hook")
# (find-fline "~/LOGS/2022dec29.emacs" "waits until sly-mrepl-hook")
# (find-evardescr 'sly-connected-hook)
# (find-evariable 'sly-connected-hook)
# (find-evardescr 'sly-mrepl-hook)
# (find-evariable 'sly-mrepl-hook)
# (find-slynode "")
# (find-slyfile "")
# (find-slygrep "grep --color=auto -nH --null -e mrepl-hook *.el */*.el")
# (find-slygrep "grep --color=auto -nH --null -e add-hook *.el */*.el")
# (find-slyfile "contrib/sly-mrepl.el" "(run-hooks 'sly-mrepl-hook")
# (find-elnode "Waiting")
# (find-elnode "Waiting" "Function: sit-for")
# (find-efunctiondescr 'sit-for)
# (find-efunction      'sit-for)
# (find-es "emacs" "w3m-goto-on-load")
# (find-es "emacs" "unwind-protect")
# (find-es "emacs" "catch-and-throw")
# (find-es "emacs" "hooks")
# (find-elnode "Mutex Type")
# (find-elnode "Condition Variables")
# https://stackoverflow.com/questions/6578373/sleep-in-emacs-lisp
# (find-efunctiondescr 'set-process-sentinel)
# (find-efunction      'set-process-sentinel)
# (find-efunction-links 'set-process-sentinel)
# (find-elnode "Sentinels")



#####
#
# Sly from the git repository
# 2023jan13
#
#####

# «sly-git»       (to ".sly-git")
# «sly-from-git»  (to ".sly-from-git")
# https://github.com/joaotavora/sly

# (find-git-links "https://github.com/joaotavora/sly" "slygit")
# (code-c-d "slygit" "~/usrc/sly/")
# (find-slygitfile "")




#####
#
# In Sly "presentations" were replaced by "backreferences"
# 2023jan13
#
#####

# «sly-presentations»  (to ".sly-presentations")
# (find-fline "~/LOGS/2023jan13.clschool" "sly presentation")
# (find-slygrep "grep --color=auto -nH --null -e presentation *.el */*.el")
# (find-slygrep "grep --color=auto -niH --null -e presentation * */*")
# (find-slygrep "grep --color=auto -nH --null -e presentation *.el */*.el")
# (find-qlslygrep "grep --color=auto -niRH --null -e present *")
# (find-qlslygrep "grep --color=auto -niRH --null -e backref *")
# (find-qlslyfile "README.md" "Presentations")
# (find-slynode "REPL backreferences")

https://github.com/joaotavora/sly

SLY's highlights are: (...) "Presentations" replaced by interactive
backreferences which highlight the object and remain stable throughout
the REPL session



#####
#
# sly-keymaps
# 2024sep04
#
#####

# «sly-keymaps»  (to ".sly-keymaps")
# (find-try-sly-intro "6. Sly: basic keys")
# (find-try-sly-intro "6. Sly: basic keys" "sly-autodoc-mode-map")




#####
#
# sly-eval-in-emacs
# 2024sep19
#
#####

# «sly-eval-in-emacs»  (to ".sly-eval-in-emacs")
# (find-slyfile "sly.el" "(defcustom sly-enable-evaluate-in-emacs")
# (find-slyfile "contrib/slynk-mrepl.lisp" "(defun copy-to-repl-in-emacs")
# (find-slynkfile "slynk.lisp" "(defun eval-in-emacs")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
* (setq sly-enable-evaluate-in-emacs t)
(slynk-mrepl:copy-to-repl-in-emacs (list 42 'foo) :blurb "Hello world.")




#####
#
# sly-inspector
# 2023jan14
#
#####

# «sly-inspector»  (to ".sly-inspector")
# (find-slynode "Inspector")
# (find-slynode "Inspector" "C-c I")
# (find-slynode "Inspector" "inspect-for-emacs")
# (find-qlslygrep "grep --color=auto -niRH --null -e inspect *")
# (find-efunctiondescr 'sly-inspect)
# (find-efunction      'sly-inspect)
# (find-efunctiondescr 'eepitch-eval-at-target-window)
# (find-efunction      'eepitch-eval-at-target-window)
# (find-fline "~/LOGS/2023jan13.clschool" "C-c I (macroexpand ")
# (find-qlslynkgrep "grep --color=auto -niRH --null -e inspect *")
# (find-qlslynkgrep "grep --color=auto -niRH --null -e eval-for-inspector *")
# (find-slynkfile "slynk.lisp" "(defmacro defslyfun ")

# (find-ebuffer "*sly-events for sbcl*")
# (find-ebuffer "*sly-inspector for sbcl*")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(defvar o)
(setq o (macroexpand '(defstruct mypoint x y)))
(setq o (list 2 3))
(apropos "emacs-inspect")
(apropos "eval-for-inspector")
(slynk-backend:emacs-inspect "o")
(slynk:eval-for-inspector)
(slynk:eval-for-inspector nil nil 'slynk:init-inspector "o")
(slynk:eval-for-inspector nil nil 'slynk:init-inspector "(list 2 3)")

* (eepitch-eval-at-target-window '(sly-inspect "(macroexpand '(defstruct mypoint x y))"))


(:emacs-rex
 (slynk:eval-for-inspector nil nil 'slynk:init-inspector "o")
 "common-lisp-user" 1 100)

(debug-on-entry 'slynk:eval-for-inspector)
(cancel-debug-on-entry 'slynk:eval-for-inspector)

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(apropos "debug-on-entry")
(apropos "debug")



#####
#
# A question about Sly/Slime: how do I invoke the inspector from Common Lisp?
# 2023jan15
#
#####

# «sly-inspector-email»  (to ".sly-inspector-email")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-01/msg00165.html Edrx question
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-02/msg00042.html Madhu answer ***
# https://mail.google.com/mail/u/0/#inbox/KtbxLvhKPCHpHgPrhSPvKtbpcgKVGJTbBq

Hi list,

this is a question about a part of the guts of Sly/Slime that looks
very technical, but that is very close to the surface. Answers like
"it's better to ask this in the places such and such" are welcome -
I'm only asking this here because I couldn't find the places such and
such in the docs.

The standard way to learn Common Lisp is to use Emacs as its
interface, and use either Sly or Slime - I will say just "Sly" from
here onwards because it's what I'm using, but they're similar - to
make Emacs and CL talk to one another. This is explained here:

  http://joaotavora.github.io/sly/#Introduction

I am working on some "executable notes" - in this sense:

  http://angg.twu.net/eev-for-longtime-emacs-users.html

that would help eev users with no experience with Common Lisp to
install and test CL and Sly in just a few minutes. The initial parts
of these "executable notes" are working very well, but as far as I
know the people who like eev are a tiny subset of the people who like
to explore how things are implemented...

...but let me go straight to the point. Suppose that we have SBCL and
Sly installed, and we have a SBCL/Sly REPL running in a buffer that I
will refer to as the "mrepl". One way to open an "inspector" - see:

  http://joaotavora.github.io/sly/#Inspector

is to go to the mrepl and type something like this there:

  C-c I (list 2 3) RET
  C-c I (macroexpand '(defstruct mypoint x y)) RET

the first `C-c I' "inspects" a small object, the second inspects a big
one.

A more low-level way to invoke the inspector is to run this in the
mrepl:

  M-: (sly-inspect "(macroexpand '(defstruct mypoint x y))") RET
  
The buffer "*sly-events for sbcl*" holds a kind of log of the last
messages exchanged between Emacs and SBCL - or: "between Sly and
Slynk". We can inspect it with:

  (switch-to-buffer "*sly-events for sbcl*")

and it gives us a good starting point for understanding the details of
how this communication happens.



My Main Question
================
When we run this in the mrepl,

  M-: (sly-inspect "(list 2 3)") RET

The elisp function `sly-inspect' runs some preparations and then
sends, via Sly->Slynk->SBCL, a sexp that SBCL should execute. I am
trying to recreate that sexp, but the closest that I could get was
this:

  (slynk:eval-for-inspector nil nil 'slynk:init-inspector "(list 2 3)")

but when I run that in the SBCL/Sly REPL I get this,

  CL-USER> (slynk:eval-for-inspector nil nil 'slynk:init-inspector "(list 2 3)")
  ; Debugger entered on #<UNBOUND-VARIABLE *BUFFER-PACKAGE* {10043176C3}>
  [1] CL-USER> 

so there's something missing - the CL sexp above needs to invoked
inside some wrapper that sets up the correct context.

Anyone knows how to call that function in right way?


  Thanks in advance!
  Eduardo Ochs
    http://angg.twu.net/#eev




#####
#
# slime-inspector-email
# 2023jan15
#
#####

# «slime-inspector-email»  (to ".slime-inspector-email")



#####
#
# slynks-compare
# 2024sep07
#
#####

# «slynks-compare»  (to ".slynks-compare")
# (find-fline "~/.emacs.d/elpa/sly-20240809.2119/slynk/")
# (find-fline "~/quicklisp/dists/quicklisp/software/sly-20231021-git/slynk/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
D1=$HOME/.emacs.d/elpa/sly-20240809.2119/slynk/
D2=$HOME/quicklisp/dists/quicklisp/software/sly-20231021-git/slynk/
cd $D1; find * -type f | tee /tmp/o
for i in $(cat /tmp/o); do diff $D1/$i $D2/$i; done



#####
#
# slynk-faster
# 2024sep11
#
#####

# «slynk-faster»  (to ".slynk-faster")
# (find-fline "~/LOGS/2024sep11.clschool" "Loading Swank faster")
# (find-node "(sly)Loading Slynk faster")



#####
#
# slime-eval-async
# 2023jan16
#
#####

# «slime-eval-async»  (to ".slime-eval-async")

** (call-interactively 'slime)
** (eek "C-u M-x slime")

** (find-efunctiondescr 'slime-repl-inspect)
** (find-efunction      'slime-repl-inspect)
** (find-efunctiondescr 'slime-inspect)
** (find-efunction      'slime-inspect)
** (find-efunctiondescr 'slime-eval-async)
** (find-efunction      'slime-eval-async)
** (find-efunctiondescr 'slime-rex)
** (find-efunction      'slime-rex)

* (defun ee-kill-sexp (sexp) (let ((str (ee-S sexp))) (kill-new str) sexp))
* (ee-kill-sexp '(slime-eval-async '(swank:init-inspector "(list 4 5)") 'slime-open-inspector))

* (defun slr () (interactive) (find-ebuffer "*slime-repl sbcl*"))
* (defun sle () (interactive) (find-ebuffer "*slime-events*"))
* (eepitch '(slr))
* (eepitch-kill)
* (eepitch '(slr))
* (find-3a nil '(slr) '(sle))

(swank:init-inspector "(list 4 5)")
(slime-rex '(swank:init-inspector "(list 4 5)"))

(:emacs-rex
 (swank:init-inspector "(list 3 4)")
 "COMMON-LISP-USER" :repl-thread 6)
(:return
 (:ok
  (:title "#<CONS {10020357B7}>" :id 0 :content
	  (("A proper list:" "\n" "0" ": "
	    (:value "3" 1)
	    "\n" "1" ": "
	    (:value "4" 2)
	    "\n")
	   10 0 500)))
 6)





#####
#
# eepitch-sly-inspect
# 2023jan14
#
#####

# «eepitch-sly-inspect»  (to ".eepitch-sly-inspect")
# (find-angg ".emacs" "sly" "eepitch-sly-inspect")
# (to "trace")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(defvar o nil)
(setq o '(20 30))
* (eepitch-sly-inspect "o")



#####
#
# slime-socket
# 2023jan16
#
#####

# «slime-socket»  (to ".slime-socket")
# (find-slimenode "Other configurables")
# (find-slimenode "Introduction")
# (find-slimenode "Running")
# (find-slimenode "Loading Swank faster")
# (find-slimenode "Communication style")
# (find-slimenode "Communication style" ":SIGIO")
# (find-slimenode "Other configurables")
# (find-slimegrep "grep --color=auto -niRH --null -e socket *")
# (find-slimefile "slime.el" "(defvar slime-net-processes ")
# (find-slimefile "slime.el" "(defun slime-net-send ")
# (find-slimefile "slime.el" "(defun slime-net-connect ")
# (find-efile "net/network-stream.el" "(defun open-network-stream ")
# (find-elnode "Network")
# (find-elnode "Network" "make-network-process")
# (find-efunctiondescr 'make-network-process)
# (find-efunction      'make-network-process)
# (find-efunctiondescr 'open-network-stream)
# (find-efunction      'open-network-stream)
# (find-efunctiondescr 'delete-process)
# (find-efunction      'delete-process)
# (find-eshortdoc 'process)

(find-anggfile "elisp/echo-server.el")





#####
#
# sly-hyperspec
# 2023jan11
#
#####

# «sly-hyperspec»  (to ".sly-hyperspec")
# (find-efunctiondescr 'common-lisp-hyperspec-lookup-reader-macro)
# (find-efunction      'common-lisp-hyperspec-lookup-reader-macro)
# (find-hfunction      'common-lisp-hyperspec-lookup-reader-macro)
# (find-fline "~/LOGS/2023jan11.clschool" "common-lisp-hyperspec-lookup")





#####
#
# GCL
# 2009oct02 / 2024sep01
#
#####

# «gcl»  (to ".gcl")
# (find-status   "gcl")
# (find-vldifile "gcl.list")
# (find-udfile   "gcl/")
# (find-status   "gcl-doc")
# (find-vldifile "gcl-doc.list")
# (find-udfile   "gcl-doc/")
# http://www.gnu.org/software/gcl/
# http://lists.gnu.org/archive/html/gcl-devel/
# (find-fline "~/LOGS/2024sep01.lisp" "very few things support GCL...")

# (find-zsh "availabledebs | sort | grep gcl")

* (eepitch-gcl)
* (eepitch-kill)
* (eepitch-gcl)
(help)
(defun foo () (foo))
(disassemble 'foo)




(add-to-list 'load-path "~/emacs/slime")
;; (require 'slime)
;; (setq slime-protocol-version 'ignore)
(require 'slime-autoloads)
;(slime-setup '(slime-parse slime-repl slime-indentation))
(add-hook 'slime-load-hook (lambda ()
                            (interactive)
			    (require 'slime-presentations)
                            (set-face-foreground
                             'slime-repl-inputed-output-face
                             "#dfaf8f")))
(global-set-key "\C-z" 'slime-selector)
(add-hook 'slime-repl-mode-hook 'turn-on-paredit)

(slime-setup '(slime-fancy slime-indentation))

(setq inferior-lisp-program "/opt/local/bin/sbcl")
(setq inferior-lisp-program "sbcl")
you can ignore the add-hook for setting the face
 


(setq inferior-lisp-program 'sbcl)

 *  *inferior-lisp*        15825 Comint           (inferior-lisp run)
  % *Completions*           6811 Completion List  
 *  TODO                  890570 Fundamental      ~/TODO
 *  *Messages*              3547 Fundamental      
 *  *slime-events*          4604 Fundamental      
    *scratch*                191 Lisp Interaction 


(find-ebuffer "*inferior-lisp*")
(find-ebuffer "*slime-events*")


# (find-status   "slime")
# (find-vldifile "slime.list")
# (find-udfile   "slime/")

(code-c-d "slime" "/usr/share/emacs/site-lisp/slime/")
;; (find-slimefile "")
;; (find-slimegrep "grep -nrH -e face *")
;; (find-slimegrep "grep -nrH -e slime-repl-inputed-output-face *")
;; (find-slimegrep "grep -nrH -e 'Connected. May the source be with you!' *")
;; (find-slimegrep "grep -nrH -e 'May the source be with you!' *")
;; (find-slimegrep "grep -nrH -e slime-words-of-encouragement *")
;; (find-slimegrep "grep -nrH -e slime-random-words-of-encouragement *")
;; (find-slimegrep "grep -nrH -e 'Connected. %s' *")
;;
;; (find-node "(slime)Recovery" "slime-restart-inferior-lisp")
;; (find-node "(slime)Installation")
;;
(setq inferior-lisp-program "/usr/bin/sbcl")
;; (add-to-list 'load-path "~/hacking/lisp/slime/")
;; (require 'slime)
;; (slime-setup)

* (eepitch '(find-ebuffer "*slime-repl sbcl*"))
(+ 1 2)
(defun foo () (foo))
(disassemble 'foo)

(defun iterate (n) (cons n (list `(iterate ,(1+ n)))))
(defun lazy-cdr (l) (eval (cadr l)))
(defun take (n l)
  (when (and (> n 0) l)
    (cons (car l)
	  (take (1- n) (lazy-cdr l)))))
(take 10 ())

* (slime-restart-inferior-lisp)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
w sbcl


* (eepitch '(find-ebuffer "*slime-repl sbcl*"))

(defun force (form)
 (apply (car form) (cdr form)))

(defmacro delay (form)
 `(list #',(car form) ,@(cdr form)))

(defun iterate (n)
 (cons n (delay (iterate (1+ n)))))

(defun take (n lazy-list)
 (let ((acc))
   (labels ((take- (n lazy-list)
              (when (and (> n 0) lazy-list)
                (push (car lazy-list) acc)
                (take- (1- n) (force (cdr lazy-list))))))
     (take- n lazy-list)
     (reverse acc))))

(take 5 (iterate 1))
(take 5000 (iterate 1))




#####
#
# sbcl
# 2011oct15 / 2021sep17
#
#####

# «sbcl»  (to ".sbcl")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti sbcl sbcl-doc sbcl-source

# (find-status   "sbcl")
# (find-vldifile "sbcl.list")
# (find-udfile   "sbcl/")
# (find-status   "sbcl-doc")
# (find-vldifile "sbcl-doc.list")
# (find-udfile   "sbcl-doc/")
# (find-status   "sbcl-source")
# (find-vldifile "sbcl-source.list")
# (find-udfile   "sbcl-source/")
# (find-sbclfile "src/interpreter/")
# (find-node "(sbcl)Top")
# (find-node "(sbcl)Running external programs")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)


# (find-sbclfile "")
# (find-sbclfile "src/assembly/x86/")
# (find-sbclfile "src/code/")
# (find-sbclfile "src/code/debug.lisp" "debug-help-string")
# (find-sbclfile "src/code/defstruct.lisp")
# (find-sbclsh "find * | sort")
# (find-sbclnode "")
# (find-sbclnode "Compiler")
# (find-sbclnode "Interpreter")
# (find-sbclnode "Concept Index")
# (find-sbclnode "Function Index")
# (find-sbclnode "Variable Index")
# (find-sbclnode "Type Index")

# (find-sbclnode "Debugger")
# (find-sbclnode "Debugger Banner")
# (find-sbclnode "Exiting Commands")
# (find-sbclnode "Enabling and Disabling the Debugger")

# (find-ansiclnode "")
# (find-ansiclnode "defmacro" "(documentation 'mac1 'function)")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(+ 1 2)
(documentation '+   'function)
(documentation '+++ 'function)
(documentation 'iterate 'function)
HELP

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
' (disable-debugger)
HELP
(abort)
(toplevel)



#####
#
# sbcl-git
# 2023jan12
#
#####

# «sbcl-git»  (to ".sbcl-git")
# https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/
# (find-git-links "https://git.code.sf.net/p/sbcl/sbcl" "sbclgit")
# (code-c-d "sbclgit" "~/usrc/sbcl/")
# (find-sbclgitfile "")
# (find-sbclgitsh "du -c .* *")




#####
#
# lazy.lisp
# 2011oct14
#
#####

# «lazy.lisp»  (to ".lazy.lisp")
# (find-fline "~/tmp/lazy.lisp")
# (find-ansiclnode "Index")
# (find-ansiclnode "Index" "symbol-function")
# (find-ansiclnode "defstruct")
# (find-ansiclnode "defgeneric")
# (find-ansiclnode "defmethod")
# (find-ansiclnode "flet; labels; macrolet")
# (find-ansiclnode "Sharpsign" "function abbreviation")
# (find-ansiclnode "Ordinary Lambda Lists" "&key")
# (find-ansiclnode "lambda-list-keywords")
# (find-ansiclnode "load")

# (find-ansiclnode "find-symbol")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
* ;; (find-fline "~/tmp/lazy.lisp")
(load "/home/edrx/tmp/lazy.lisp")
(delay (+ 1 2))
'(+ 1 2)
(eval '(+ 1 2))


(symbol-function 'iterate)
(disassemble 'iterate)


(find-symbol 'iterate)



Hi!
First suggestions:

1) at this point DELAY is somewhat like QUOTE... if we could write
  ^(+ 1 2) instead of (delay (+ 1 2)), and if we had an evaluating
  strategy that applied FORCE exactly when the value of an expression
  were needed, then

    (DEEPFORCE ^(IF ^(< 1 2) ^(+ 3 4) ^(+ 5 6)))

  would yield 7. Suggestion: write DELAY as ^ in the comments - but
  implementing that isn't important.

2) At this moment, AFAICT, the distinction between the fields FUNCTION
   and ARGS is not used - I think it is possible to re-implement THUNK
   as a structure with a single field, CODE, and use EVAL instead of
   APPLY... and then things like ^7 and ^VAR start to make sense too.
   "Why we would want that?", you might ask? See the next item!

3) It would be nice to have a variant of ^ that prints its CODE when
   it is FORCEd, and another one that prints its result _after_ the
   FORCE. Then by sprinkling these "printing ^s" in a program we can
   display what things are evaluated, and in which order...

4) Have you ever stumbled on this paper?
   http://belle.sourceforge.net/doc/hughes95design.pdf
   When I tried to read it, ages ago, I didn't understand even a
   tiny fraction of it - but it made me a deep impression anyway.

Now some questions... if I type, say FOOBAR at the SBCL prompt I get
an error, and it enters the debugger, and the prompt changes to "0]",
an on the next error to "0[2]", then "0[3]", and so on. What is the
right way to go back to toplevel? I found that ^D removes a level of
the debugger, but when the prompt is "*" a ^D leaves SBCL... Also,
after an empty line, a line with just a comment, or a like with
incomplete input, like "(+ 1", SBCL's prompt is just the empty string
- is there a trivial way to change that to "*"?

I downloaded more docs and books about Common Lisp, SBCL, etc, and
spent some hours browsing them and creating links to the relevant
places... I understand most of your code now - I'm not sure about the
LABELS part, though.

Slime is still a mystery to me, for a very silly reason - it deals
with buffers and windows in its own funny ways, and I find it
difficult to control it with eepitch...

  More later!
    Cheers,
      E.




#####
#
# PicoLisp
# 2011nov23
#
#####

# «picolisp»  (to ".picolisp")
# (find-angg ".emacs" "picolisp")
# (find-es "org" "picolisp")
# http://picolisp.com/5000/-2.html
# http://picolisp.com/5000/!wiki?Documentation
# http://software-lab.de/doc/app.html
# http://software-lab.de/doc/app.html#minAppRef
# http://software-lab.de/down.html
# http://software-lab.de/picoLisp-3.0.8.tgz
# http://software-lab.de/wiki.tgz
# http://www.prodevtips.com/2008/03/28/pico-lisp/
#*
rm -Rv ~/usrc/picoLisp/
tar -C ~/usrc/ -xvzf \
  $S/http/software-lab.de/picoLisp-3.0.8.tgz
cd     ~/usrc/picoLisp/

#*
# (code-c-d "picolisp" "~/usrc/picoLisp/")
# (find-picolispfile "")
# (find-picolispfile "INSTALL")
# (find-picolispfile "src/")
# (find-picolispfile "src/om")
# (find-picolispfile "bin/")
# (find-picolispfile "doc/")
# (find-picolispw3m "doc/tut.html")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/picoLisp/
cd ~/usrc/picoLisp/src/
make |& tee om

* (eepitch-picolisp)
* (eepitch-kill)
* (eepitch-picolisp)
(+ 1 2)




#####
#
# Common Worm
# 2011nov27
#
#####

# «common-worm»  (to ".common-worm")
# (find-gitclone-links "https://github.com/sykopomp/common-worm" "common-worm")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv /tmp/common-worm/
mkdir   /tmp/common-worm/
cd      /tmp/common-worm/
git clone https://github.com/sykopomp/common-worm
tar -cvzf ~/tmp/common-worm-git.tgz *

rm -Rfv ~/usrc/common-worm/
tar -C  ~/usrc/ -xvzf ~/tmp/common-worm-git.tgz
cd      ~/usrc/common-worm/

# (code-c-d "commonworm" "~/usrc/common-worm/")
# (find-commonwormfile "")
# (find-commonwormfile "common-worm.lisp")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
* (find-commonwormfile "common-worm.lisp")

# CL-SDL:
# http://cl-sdl.sourceforge.net/screenshots/index.html




#####
#
# QuickLisp (and sdl-gfx)
# 2011nov27 / 2022jan11
#
#####

# «quicklisp»  (to ".quicklisp")
# (find-try-sly-intro "4. Download quicklisp.lisp")
# (find-angg ".sbclrc")
# (find-angg ".emacs" "quicklisp")
# (find-qlsh "find * | sort")

# 2022jan11:
# https://www.quicklisp.org/beta/
# https://www.quicklisp.org/beta/#installation
# https://beta.quicklisp.org/quicklisp.lisp

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/quicklisp/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "$S/https/beta.quicklisp.org/")
mkdir -p $S/https/beta.quicklisp.org/
cd       $S/https/beta.quicklisp.org/
laf      $S/https/beta.quicklisp.org/
wget -N   https://beta.quicklisp.org/quicklisp.lisp

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
;; (find-fline "$S/https/beta.quicklisp.org/quicklisp.lisp")
(load #P  "~/snarf/https/beta.quicklisp.org/quicklisp.lisp")
(quicklisp-quickstart:help)
(quicklisp-quickstart:install)

sbcl --load quicklisp.lisp

  (quicklisp-quickstart:help)
  (quicklisp-quickstart:install)
  ;;
  ;; Quicklisp has already been installed.
  ;; Load #P"/home/edrx/quicklisp/setup.lisp" instead.
  ;; (find-fline "~/quicklisp/setup.lisp")
  ;;
  (load #P"~/quicklisp/setup.lisp")
  ;;
  (ql:add-to-init-file)
  ;; (find-angg ".sbclrc")


  ;; (find-qlfile "")
  (load #P"~/quicklisp/quicklisp.lisp")
  (my-require-asdf)
  (my-require-quicklisp-setup)
  (quicklisp-quickstart:help)

* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
to_lisp();
(load #P"~/quicklisp/setup.lisp")




# (find-sh "find ~ -atime 0")
# (find-sh "find ~ | grep -i quicklisp")
# (find-fline "~/.cache/common-lisp/sbcl-2.1.1.debian-linux-x64/home/edrx/quicklisp/quicklisp/")
# (find-fline "~/quicklisp/")
# (find-fline "~/quicklisp/asdf.lisp")




# Old notes:
# http://www.quicklisp.org/
# http://www.quicklisp.org/beta/
# http://www.quicklisp.org/beta/index.html
# http://beta.quicklisp.org/quicklisp.lisp
# http://lispbuilder.sourceforge.net/lispbuilder-sdl-image.html
# http://lispbuilder.sourceforge.net/lispbuilder-sdl-gfx.html
# http://code.google.com/p/lispbuilder/wiki/LispbuilderSDL#Example_Code
# http://code.google.com/p/lispbuilder/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd $S/http/beta.quicklisp.org/
sbcl --load quicklisp.lisp
  (quicklisp-quickstart:install)
  ;; (find-fline "~/quicklisp/")
  (ql:add-to-init-file)
  ;; (find-fline "~/.sbclrc")
  (ql:quickload '(:lispbuilder-sdl-gfx))


* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)

# http://common-lisp.net/project/cffi/manual/html_node/The-Groveller.html
# http://common-lisp.net/project/cffi/manual/cffi-manual.html#Tutorial_002dComparison

# http://en.wikipedia.org/wiki/Daniel_Weinreb
# http://www.bitsavers.org/pdf/mit/cadr/LISPM_WindowSystem_Aug83.pdf

http://www.gigamonkeys.com/book/loop-for-black-belts.html
http://common-lisp.net/~loliveira/tmp/iterate-manual/html_node/Introduction.html
http://leon.bottou.org/projects/minilisp




#####
#
# cookbook
# 2019jul06 / 2024sep18
#
#####

# «cookbook» (to ".cookbook")
# (find-angg ".emacs" "clcookbook")
# https://lispcookbook.github.io/cl-cookbook/
# https://lispcookbook.github.io/cl-cookbook/web.html
# https://github.com/LispCookbook/cl-cookbook
# (code-c-d "clcookbook" "~/usrc/cl-cookbook/")
# (find-clcookbookfile "")
# (find-clcookbooksh "find * | sort")


# (find-clcookbookfile "macros.md")
# https://lispcookbook.github.io/cl-cookbook/macros.html
# (find-wgetrecursive-links "https://lispcookbook.github.io/cl-cookbook/")

# (find-clcookbookdocrgrep "grep --color=auto -nRH --null -e pprint *")
# (find-clcookbookgrep "grep --color=auto -nRH --null -e pprint *")

;; Based on: (find-eev "eev-lean4.el" "ee-leandoc-:leanmeta")
(setq ee-leandoc-:clcookbook
 '(:kw         "clcookbook"
   :kill       "clck"
   :k2         "clc"
   :base-web   "https://lispcookbook.github.io/cl-cookbook/"
   :git-repo   "https://github.com/LispCookbook/cl-cookbook"
   :usrc       "~/usrc/"
   :base-rst   "~/usrc/cl-cookbook/"
   :base       "index"
   :rst        ".md"
   ))
;; (find-code-leandocpdf 'ee-leandoc-:clcookbook)
        (code-leandocpdf 'ee-leandoc-:clcookbook)

;; Try: (find-clcookbookdoc  "macros")
;;      (find-clcookbookdocw "macros")
;;      (find-clcookbookdocr "macros")







#####
#
# As Powerful as Possible
# 2020sep29
#
#####

# «as-powerful-as-possible»  (to ".as-powerful-as-possible")
# http://www.nextpoint.se/?p=802
# https://github.com/amno1/as-powerful-as-possible
# https://www.reddit.com/r/emacs/comments/j0t6dy/as_powerful_as_possible/
# (find-git-links "https://github.com/amno1/as-powerful-as-possible" "aspowerfulaspossible")
# (find-aspowerfulaspossiblefile "translation-by-chapter.org")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/as-powerful-as-possible/
cd      ~/usrc/
git clone https://github.com/amno1/as-powerful-as-possible
cd      ~/usrc/as-powerful-as-possible/

# (find-fline "~/usrc/")
# (find-fline "~/usrc/as-powerful-as-possible/")
# (find-gitk  "~/usrc/as-powerful-as-possible/")

# (code-c-d "aspowerfulaspossible" "~/usrc/as-powerful-as-possible/")
# (find-aspowerfulaspossiblefile "")


# This directory contains the English translation of the book
# "Moan koliko je god mogue" by Kazimir Majorinc
# The book itself is about the origins and the first few years of
# development of Lisp, the programming language.
# The translation is done by me, as a hobby for my own reading pleasure
# and to practice my language skills.
# Since I am not a native English speaker, there might be (are) some
# errors.




#####
#
# fennel
# 2020dec19
#
#####

# «fennel»  (to ".fennel")
# (find-es "fennel")




#####
#
# lisp-games-jam
# 2021sep23
#
#####

# «lisp-games-jam»  (to ".lisp-games-jam")
# (find-fline "~/LOGS/2021sep23.emacs" "autumn-lisp-game-jam-2021")
# https://itch.io/jam/autumn-lisp-game-jam-2021
# https://github.com/lispgames/lispgames.github.io/wiki




#####
#
# Susam's Emacs For Common Lisp (Emacs4CL)
# 2021feb18
#
#####

# «emacs4cl»  (to ".emacs4cl")
# https://github.com/susam/emacs4cl
# https://irreal.org/blog/?p=11485 Emacs For Common Lisp





#####
#
# lexical-binding
# 2021aug14
#
#####

# «lexical-binding»  (to ".lexical-binding")
# https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node43.html 3. Scope and Extent

<edgar-rft> edrx: the CLHS is a bit huge, but maybe it's helpful to
            know that lexical binding first appeared in Scheme and
            only later was adopted by Common Lisp. I'll try to find
            some docs from that time.
<edgar-rft> In the CLHS it's Chapter 3.1.4 "Closures and Lexical
            Binding" ->
            http://www.lispworks.com/documentation/HyperSpec/Body/03_a.htm
<edgar-rft> A more detailed discussion can be found in CLtL2,
            Chapter 3 "Scope and Extent" ->
            https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node43.html
<edgar-rft> The original papers from Guy Steele and Gerald Sussman
            can be found here ->
            https://web.archive.org/web/20160510140804/http://library.readscheme.org/page1.html
<edgar-rft> oh, great, a collection of dead links :-( let my find
            something better...




#####
#
# iup
# 2021nov30
#
#####

# «iup»  (to ".iup")
# https://github.com/lispnik/iup
# https://lisp-journey.gitlab.io/blog/gui-programming-in-common-lisp-part-4-of-5-iup/




#####
#
# David Bremner's lectures (on dynamic and lexical binding/scope)
# 2021dec04
#
#####

# «david-bremner»  (to ".david-bremner")
# https://www.cs.unb.ca/~bremner/
# https://www.cs.unb.ca/~bremner/teaching/cs4613/lectures/lecture7.web.pdf
(code-pdf-page "bremner7" "$S/https/www.cs.unb.ca/~bremner/teaching/cs4613/lectures/lecture7.web.pdf")
(code-pdf-text "bremner7" "$S/https/www.cs.unb.ca/~bremner/teaching/cs4613/lectures/lecture7.web.pdf")
;; (find-bremner7page)
;; (find-bremner7text)
# (find-bremner7page 15 "Dynamic and Lexical Scope")
# (find-bremner7text 15 "Dynamic and Lexical Scope")

# https://mail.google.com/mail/u/0/#inbox/KtbxLwHLqllfxJCCQjdxfNmHnJJwFChZVB



#####
#
# danceball - by David O'Toole
# 2021dec05
#
#####

# «danceball»  (to ".danceball")
# https://dto.itch.io/danceball

 (eepitch-shell)
 (eepitch-kill)
 (eepitch-shell)
# To install the dependencies:
sudo apt-get install libsdl-gfx1.2 libsdl-gfx1.2-dev
sudo apt-get install libsdl-ttf2.0-0
sudo apt-get install libsdl-mixer1.2 libsdl-mixer1.2-dev


 (eepitch-shell)
 (eepitch-kill)
 (eepitch-shell)
cd /tmp/
rm -Rv /tmp/danceball-0.6/
mkdir  /tmp/danceball-0.6/
tar -C /tmp/ -xvzf \
       /tmp/danceball-0.6.tar.gz
cd     /tmp/danceball-0.6/
./danceball.bin

# (find-fline "/tmp/danceball-0.6/")
# (find-fline "/tmp/danceball-0.6/README")
# (find-fline "/tmp/danceball-0.6/doc/")
# (find-fline "/tmp/danceball-0.6/doc/dictionary/")




#####
#
# consfigurator
# 2021dec25
#
#####

# «consfigurator»  (to ".consfigurator")
# https://spwhitton.name/doc/consfigurator/installation.html

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
git clone https://git.spwhitton.name/consfigurator ~/.local/share/common-lisp/source/consfigurator
# (code-c-d "consfigurator" "~/.local/share/common-lisp/source/consfigurator/")
# (find-consfiguratorfile "")
# (find-consfiguratorfile "README.rst" "C-c C-c")





#####
#
# CEPL: A lispy and REPL-friendly Common Lisp library for working with OpenGL
# 2021dec13
#
#####

# «CEPL»  (to ".CEPL")
# https://news.ycombinator.com/item?id=29535450 CEPL: A lispy and REPL-friendly Common Lisp library for working with OpenGL (github.com/cbaggers)
# https://www.youtube.com/playlist?list=PL2VAYZE_4wRKKr5pJzfYD1w4tKCXARs5y
# https://www.youtube.com/watch?v=6pMyhrDcMzw&list=PL2VAYZE_4wRKKr5pJzfYD1w4tKCXARs5y&index=4
# https://github.com/cbaggers/cepl
# (code-c-d "cepl" "~/usrc/cepl/")
# (find-ceplfile "")

# (find-git-links "https://github.com/cbaggers/cepl.examples" "ceplexamples")
# (code-c-d "ceplexamples" "~/usrc/cepl.examples/")
# (find-ceplexamplesfile "")
# (find-ceplexamplesfile "examples/")




#####
#
# case-sensitivity
# 2022jan14
#
#####

# «case-sensitivity»  (to ".case-sensitivity")
# https://www.cliki.net/case%20sensitivity




#####
#
# landoflisp
# 2022jan21
#
#####

# «landoflisp»  (to ".landoflisp")
# http://landoflisp.com/




#####
#
# sectorlisp
# 2022jan22
#
#####

# «sectorlisp»  (to ".sectorlisp")

https://news.ycombinator.com/item?id=29630293 Show HN: Lisp with GC in 436 Bytes (justine.lol) ***
https://justine.lol/sectorlisp2/
https://justine.lol/
https://woodrush.github.io/blog/posts/2022-01-12-sectorlisp-io.html ***

http://archive.md/https://www.newyorker.com/magazine/2011/11/28/pre-occupied
http://archive.md/https://www.thenation.com/article/archive/breaking-occupy/
http://occupywallst.org/





#####
#
# read-comprehension
# 2022feb13
#
#####

# «read-comprehension»  (to ".read-comprehension")
# https://news.ycombinator.com/item?id=16583572 How knowing Lisp destroyed my programming career (2006) (derkeiler.com)

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)

(defun read-comprehension (stream char)
  (declare (ignore char))
  (destructuring-bind (expr for var in list &optional if filter-exp)
      (read-delimited-list #\] stream)
    `(loop ,for ,var ,in ,list
           ,@(when filter-exp `(,if ,filter-exp))
           collect ,expr)))

(set-macro-character #\[ #'read-comprehension)

      (read-from-string "[(+ x 1) for x in '(1 2 3) if (> x 2)]")
(eval (read-from-string "[(+ x 1) for x in '(1 2 3) if (> x 2)]"))

;; => (loop for x in '(1 2 3) if (> x 2) collect (+ x 1))
;; => (4)

(symbol-function 'read-comprehension)





#####
#
# vertical-bars
# 2022apr23
#
#####

# «vertical-bars»  (to ".vertical-bars")
# https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node14.html
# (find-clhsdoc "Body/02_cd")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(symbolp 'a)
(symbolp '|# a b #|)
(symbol-name 'a)
(symbol-name '|# a b #|)



#####
#
# with-output-to-string
# 2022jul30
#
#####

# «with-output-to-string»  (to ".with-output-to-string")
# «uiop:run-program»  (to ".uiop:run-program")
# (find-fline "~/LOGS/2022jul29.lisp" "with-output-to-string")
# (find-es "emacs" "shell-command-on-region")
# (find-angg "luatree/luatree.lisp")
# (find-clhsdoci "with-input-from-string")
# (find-clhsdoci "with-output-to-string")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(describe #'describe)
(describe #'describe)
(describe #'with-output-to-string)
(describe #'uiop:run-program)

<aeth>
<aeth> I think that's what you're looking for for processes. It's
       technically built in, but not the same in every
       implementation, so UIOP handles that.
<aeth> There's also a simpler, but outdated and less capable,
       uiop:run-program
<aeth> edrx: as for docstrings, one way is (describe #'describe)
<aeth> (or anything else if not #'describe)

# (find-sbclfile "src/code/run-program.lisp" "(defun run-program ")
# https://cmucl.org/downloads/doc/cmu-user/
# https://cmucl.org/downloads/doc/
# https://cmucl.org/downloads/doc/cmu-user.pdf
# https://cmucl.org/downloads/doc/cmu-user-letter.pdf

(code-pdf-page "cmuuser" "$S/https/cmucl.org/downloads/doc/cmu-user.pdf")
(code-pdf-text "cmuuser" "$S/https/cmucl.org/downloads/doc/cmu-user.pdf")
(code-pdf-page "cmuuser" "$S/https/cmucl.org/downloads/doc/cmu-user-letter.pdf")
(code-pdf-text "cmuuser" "$S/https/cmucl.org/downloads/doc/cmu-user-letter.pdf")
;; (find-cmuuserpage)
;; (find-cmuusertext)
;; (find-cmuuserpage (+ 8 22) "2.14     Running Programs from Lisp")
;; (find-cmuusertext (+ 8 22) "2.14     Running Programs from Lisp")



#####
#
# with-open-file
# 2022aug06
#
#####

# «with-open-file»  (to ".with-open-file")
# (to "clhs")
# (setq clhs-root "http://clhs.lisp.se/")
# (setq clhs-root "file:///usr/share/doc/hyperspec/")
# (clhs-doc "with-open-file")
# (clhs-doc "format")
# https://gigamonkeys.com/book/files-and-file-io.html
# http://cl-cookbook.sourceforge.net/files.html
# https://lispcookbook.github.io/cl-cookbook/files.html

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(dolist (a '(1 "22" (33 "44")))
  (format t "::~S~%:" a))

;; (find-sh0 "rm -fv /tmp/out.lisp")

(defvar fname)
(setq fname "/tmp/out.lisp")
(with-open-file (s fname :direction :output :if-exists :supersede)
  (dolist (a '(1 "22" (33 "44")))
    (format s "::~S~%:" a)))

;; (find-fline "/tmp/out.lisp")




#####
#
# asdf
# 2024oct27
#
#####

# «asdf»  (to ".asdf")
# https://asdf.common-lisp.dev/
# GCL is somewhat maintained but its maintainer doesn't seem to care about ASDF




#####
#
# uiop
# 2022jul30
#
#####

# «uiop»  (to ".uiop")
# https://gitlab.common-lisp.net/asdf/asdf/-/wikis/uiop-launch-program-sample-code
# (find-sbclfile "contrib/asdf/uiop.lisp")
# (find-sbclfile "src/code/ansi-stream.lisp" "(defmacro with-input-from-string")
# (find-sbclgrep "grep --color=auto -nRH --null -e with-input-from-string *")
# (find-fline "~/LOGS/2022jul30.lisp" "(uiop:run-program")
# (find-fline "~/LOGS/2022jul31.emacs" "reduce")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(require :asdf)
(describe #'reduce)

(with-input-from-string
  (s (format nil "a~%bb~%ccc~%"))
  (uiop:run-program "tac" :input s :output :lines))

(with-input-from-string
  (s (format nil "a~%bb~%ccc~%"))
  (reduce (lambda (a b) (format nil "~a~%~a" a b))
    (uiop:run-program "tac" :input s :output :lines)))



#####
#
# pprint-logical-block
# 2024sep18
#
#####

# «pprint-logical-block»  (to ".pprint-logical-block")
# (find-fline "~/LOGS/2024sep18.clschool2" "pprint-logical-block in no time")
# http://l1sp.org/search?q=pprint%2Dlogical%2Dblock
# https://www.lispworks.com/documentation/HyperSpec/Body/m_ppr_lo.htm
# https://blog.cneufeld.ca/2014/04/the-less-familiar-parts-of-lisp-for-beginners-pprint-logical-block/
# https://blog.cneufeld.ca/2014/04/the-less-familiar-parts-of-lisp-for-beginners-pprint-dispatch/
# (find-clhsdoci "pprint-logical-block")
# (find-sbcl-links 'pprint)

http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_pprint-fi_rint-tabular.html
http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/sec_22-2-2.html
https://franz.com/support/documentation/ansicl.94/subsecti/examples.htm
https://gist.github.com/wobh/2c1a109e1e6dc2cdbc28 Common Lisp Pretty Printing
https://stackoverflow.com/questions/34896432/pretty-print-large-objects-in-common-lisp
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node253.html
https://www.reddit.com/r/lisp/comments/jhhbnh/how_to_pretty_print/




#####
#
# alexandria
# 2024sep21
#
#####

# «alexandria»  (to ".alexandria")
# (find-fline "~/LOGS/2024sep21.clschool" "alexandria:curry")
# (find-quicklisp-links "alexandria")
# (code-c-d "alexandria" "~/quicklisp/dists/quicklisp/software/alexandria-20231021-git/")
# (find-alexandriafile "")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(load #P"~/quicklisp/setup.lisp")
(ql:quickload "alexandria")
(map 'vector (alexandria:curry #'* 10) (vector 4 5 6))





#####
#
# 3d-math
# 2024sep21
#
#####

# «3d-math»  (to ".3d-math")
# https://github.com/Shinmera/3d-math
# (find-quicklisp-links "3d-math")
# (find-fline "~/LOGS/2024sep21.clschool" "3d-math")
# (code-c-d "3dmath" "~/quicklisp/dists/quicklisp/software/3d-math-20231021-git/")
# (find-3dmathfile "")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(load #P"~/quicklisp/setup.lisp")
(ql:quickload "3d-math")
(defpackage :p1 (:use :common-lisp :org.shirakumo.fraf.math))
(in-package :p1)
(vec3 4 5 6)
(v+ (vec3 4 5 6) (vec3 10 20 30))
(type-of (vec3 4 5 6))

(defvar uu)
(defvar vv)
(setq uu (vec3 4 5 6))
(setq vv (vec3 404 505 606))
(vlerp uu vv 0.1)

(loop for o in uu collect o)
(describe 'vec3)

(vx3 uu)

(defun tohex0 (n) (format nil "~2,'0x" n))
(defun tohex1 (n) (tohex0 (round n)))


;; (fin
(min -20 4)


format nil (format nil "~2,'0x" n)))



(tohex0 250)
(tohex0 1000)
(tohex0 10.4)
(tohex1 10.4)

(format nil "#~2,'0x~2,'0x~2,'0x" 33 162 255)


(find-package "3d-math")
(find-package 'ql)
(apropos "3d-math")
(find-package :org.shirakumo.fraf.math)
(3d-math:make-vec3 1.0 2.0 3.0)



#####
#
# cffi
# 2024may12
#
#####

# «cffi»  (to ".cffi")
# (find-quicklisp-links "cffi")
# (code-c-d "cffi" "~/quicklisp/dists/quicklisp/software/cffi-20231021-git/" "cffi")
# (find-cffifile "")
# (find-cffifile "doc/")
# (find-cffifile "")
# (find-cffish "find * | sort")
# (find-cffigrep "grep --color=auto -nRiH --null -e load-foreign *")
# (find-cffifile "doc/cffi-manual.texinfo")
# https://gist.github.com/lagagain/df1b97eb08e57c2759c950efc3a2c7dd test Common Lisp+C with CFFI
# https://sbcl.org/manual/index.html#Foreign-Function-Interface
# https://sourceforge.net/p/sbcl/mailman/sbcl-help/thread/[email protected]/
# (find-fline "~/LOGS/2024may12.lisp")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(load #P"~/quicklisp/setup.lisp")
(ql:quickload "cffi")
(cffi:define-foreign-library liblua53 (:unix (:or "liblua5.3.so")))
(cffi:use-foreign-library    liblua53)


(cffi:use-foreign-library libhello) ;; use forenign or use `(cffi:load-foreign-library "./libhello.so"), the later not need to define-foreign-library

(cffi:defcvar ("a" a) :int "A C var named a") ;; access C var which named a




#####
#
# cffi.info
# 2024may12
#
#####

# «cffi.info»  (to ".cffi.info")
# (find-angg ".emacs" "info-path")
# (find-es "texinfo")
# (to "cffi")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/quicklisp/dists/quicklisp/software/cffi_0.24.1/doc/")
# (find-fline "/tmp/info/")
rm -Rv /tmp/info/
mkdir  /tmp/info/
cd     /tmp/info/
cp -v ~/quicklisp/dists/quicklisp/software/cffi_0.24.1/doc/*.texinfo .
cp -v ~/quicklisp/dists/quicklisp/software/cffi-20231021-git/doc/*.texinfo .
makeinfo cffi-manual.texinfo
makeinfo cffi-sys-spec.texinfo
laf

cd     /tmp/info/
rm -fv ~/info/cffi.info
cp -v         cffi.info ~/info/

# (find-node "(cffi)")
# (find-cffinode "")
# (find-cffinode "Tutorial-Loading")



#####
#
# cffi-lua-email
# 2024may12
#
#####

# «cffi-lua-email»  (to ".cffi-lua-email")
# https://mail.google.com/mail/u/0/#sent/QgrcJHrnzwjtKdmVkKJxQXwGGhhsjGFjPBq
# Examples of using Lua with SBCL?

Hi list,

anyone here has examples of using Lua from SBCL? I don't know Common
Lisp well... I installed QuickLisp and CFFI, and this works (I'm on
Debian):

  (load #P"~/quicklisp/setup.lisp")
  (ql:quickload "cffi")
  (cffi:define-foreign-library liblua53 (:unix (:or "liblua5.3.so")))
  (cffi:use-foreign-library liblua53)

Now I would like to translate some of code here

  https://github.com/edrx/emlua
  https://github.com/edrx/emlua/blob/main/emlua.cpp

to CFFI - and any examples of people doing similar things would help
me very much... in particular, in the translation of

  lua_State *L = luaL_newstate();
  luaL_openlibs(L);

it seems that I would need to define the type "lua_State *" in CFFI,
and store L in a Lisp object...

  Thanks in advance!
    Eduardo Ochs
    http://anggtwu.net/luaforth.html



#####
#
# lispbuilder-sdl-gfx
# 2024sep21
#
#####

# «lispbuilder-sdl-gfx»  (to ".lispbuilder-sdl-gfx")
# (find-quicklisp-links "lispbuilder-sdl-gfx")
# (find-quicklisp-links "lispbuilder")
# (code-c-d "lispbuilder" "~/quicklisp/dists/quicklisp/software/lispbuilder-20210807-git/")
# (find-lispbuilderfile "")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(load #P"~/quicklisp/setup.lisp")
(ql:quickload '(:lispbuilder-sdl-gfx))

(defun width-height ()
  (let ((width 200) (height 200))
    (sdl:with-init ()
      (sdl:window width height
         :title-caption "Width and Height, from Processing.org")
      (sdl:clear-display (sdl:color :r 127 :g 127 :b 127))
      (loop for i from 0 to height by 20
	 do (progn (sdl-gfx:draw-box (sdl:rectangle :x 0 :y i :w 200 :h 10)
				     :color sdl:*black*)
		   (sdl-gfx:draw-box (sdl:rectangle :x i :y 0 :w 10 :h 200)
				     :color sdl:*white*)))
      (sdl:with-events ()
	(:quit-event () t)
	(:video-expose-event () (sdl:update-display))))))

(width-height)




#####
#
# cl-vs-racket
# 2022sep05
#
#####

# «cl-vs-racket»  (to ".cl-vs-racket")

https://news.ycombinator.com/item?id=32723784 Common Lisp vs Racket (gist.github.com) - Kaveh ***
https://norvig.com/paip/loop.lisp
https://fare.livejournal.com/146698.html EVAL-WHEN considered harmful to your mental health
https://gist.github.com/vindarel/3484a4bcc944a5be143e74bfae1025e4 common-lisp-VS-clojure.md
https://lisp-journey.gitlab.io/blog/lisp-interview-kina/
https://awesome-cl.com/
 http://www.youtube.com/watch?v=nSJcuOLmkl8 Kaveh's Common Lisp Lesson 01
https://lispcookbook.github.io/cl-cookbook/emacs-ide.html

# (find-fline "$S/https/norvig.com/paip/loop.lisp")

https://news.ycombinator.com/item?id=32839542 Why Racket? Why Lisp? (2014) (beautifulracket.com) - Scheme ... actor model - lambda papers - Related: ***
https://research.scheme.org/lambda-papers/




#####
#
# debugging-lisp
# 2022sep15
#
#####

# «debugging-lisp»  (to ".debugging-lisp")
# https://malisper.me/category/debugging-common-lisp/
# https://malisper.me/debugging-lisp-part-1-recompilation/
# https://malisper.me/debugging-lisp-part-2-inspecting/
# https://malisper.me/debugging-lisp-part-3-redefining-classes/
# https://malisper.me/debugging-lisp-part-4-restarts/
# https://malisper.me/debugging-lisp-part-5-miscellaneous/
# (find-angg "LISP/debugging-1.lisp")



#####
#
# source-registry
# 2023jan09
#
#####

# «source-registry»  (to ".source-registry")
# (find-fline "~/LOGS/2023jan09.emacs" "source-registry")
# (find-fline "~/.config/common-lisp/")
# (find-fline "~/.config/common-lisp/source-registry.conf")
# (find-fline "~/.config/common-lisp/source-registry.conf.d")
# (find-sh "locate source-registry.conf")



#####
#
# find-try-sly-links
# 2023jan10
#
#####

# «find-try-sly-links»  (to ".find-try-sly-links")
# (find-try-sly-links)
# (find-try-sly-intro)
# (find-fline "~/LOGS/2023jan09.emacs")




#####
#
# sbcl-lua
# 2024may12
#
#####

# «sbcl-lua»  (to ".sbcl-lua")
# https://stackoverflow.com/questions/48353172/calling-lua-from-common-lisp
# https://sbcl.org/manual/index.html#Foreign-Function-Interface
# (find-node "(sbcl)Loading Shared Object Files" "load-shared-object")
# (find-esgrep "grep --color=auto -nH --null -e ql:quickload lisp.e ")
# (to "quicklisp")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(load #P"~/quicklisp/setup.lisp")
(ql:quickload '(:cffi))
(ql:quickload "cffi")

(find-qlsoftwarefile "cffi_0.24.1/")

(code-c-d "cffi" "~/quicklisp/dists/quicklisp/software/cffi_0.24.1/")
;; (find-cffifile "")


(require :cffi)
(use-package :cffi)
(ql:quickload "cffi")
    * (cffi:load-foreign-library "libreadline.so")
    * (defparameter *lib* *)
    * (cffi:foreign-funcall "readline" :string "> " :string)

    * (cffi:close-foreign-library *lib*)
    STYLE-WARNING: Undefined alien: "readline"


             (ql:quickload "cffi")



#####
#
# lambdalite
# 2024sep08
#
#####

# «lambdalite»  (to ".lambdalite")
# https://github.com/Wukix/LambdaLite
# https://github.com/Wukix/LambdaLite?tab=readme-ov-file#example-session




#####
#
# float-to-int
# 2024sep11
#
#####

# «float-to-int»  (to ".float-to-int")
# https://chatgpt.com/c/66e242c0-280c-800a-b32a-a7bc7e225fc2
# (to "multiple-value-bind")

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(truncate 3.14)  ; => 3
(floor 3.14)     ; => 3
(ceiling 3.14)   ; => 4
(round 3.14)     ; => 3
(round 3.5)      ; => 4
(multiple-value-bind
  (integer-part remainder)
  (truncate 3.14)
  integer-part)  ; => 3




#####
#
# color-values
# 2024sep12
#
#####

# «color-values»  (to ".color-values")
# (find-es "emacs" "defined-colors")
# (find-fline "~/LOGS/2024sep11.clschool")
# (find-fline "~/LOGS/2024sep21.clschool" "ldb")
# how do I convert a color value in #xxxxxx format to a triple of numbers in common lisp
# https://chatgpt.com/c/66e2601b-56e4-800a-bcb0-14ded5f30999

* (eepitch-sbcl)
* (eepitch-kill)
* (eepitch-sbcl)
(subseq "#123456" 1 3)  ;=> "12"

(defun splitcolor (colorspec)
  (let* ((int (parse-integer colorspec :start 1 :radix 16))
         (rr (ldb (byte 8 16) int))
         (gg (ldb (byte 8  8) int))
         (bb (ldb (byte 8  0) int)))
    (list rr gg bb)))

(splitcolor "#2046F0")  ;=> 32 70 240




#####
#
# fancy-brux (by mrcom)
# 2024sep19
#
#####

# «fancy-brux»  (to ".fancy-brux")

* (eepitch-sly)
* (eepitch-kill)
* (eepitch-sly)
(defclass brux ()
  ((a :initarg :a :initform  0 :accessor brux-a)
   (b :initarg :b :initform 42 :accessor brux-b)))

(defmethod print-object ((object brux) stream)
  (print-unreadable-object (object stream :identity t :type t)))

(defparameter *foo* (make-instance 'brux))

*foo*

(defclass fancy-brux (brux) ())

(defmethod print-object ((object fancy-brux) stream)
  (print-unreadable-object (object stream :identity t :type t)
    (format stream "a: ~S, b: ~S" (brux-a object) (brux-b object))))

(change-class *foo* 'fancy-brux)

(change-class *foo* 'brux)




#####
#
# eev-quicklisp
# 2024sep21
#
#####

# «eev-quicklisp»  (to ".eev-quicklisp")
# (find-eev "eev-tlinks.el" "find-quicklisp-links")
# (find-angg "bin/eev-quicklisp")

# (find-angg "quicklisp/setup.lisp")
# (find-angg ".emacs" "quicklisp")
# (find-angg ".sbclrc")

# (find-angg \"bin/eev-quicklisp\")
# (find-sh \"eev-quicklisp ql_codecd cffi\")




#####
#
# ixelp
# 2024oct06
#
#####

# «ixelp»  (to ".ixelp")
# (find-fline "~/LOGS/2024oct05.clschool" ",(progn 42)")





(apropos "MAKE-NULL-LEXENV")
(apropos "destructure-case")

# (find-clhsdoci "destructure-case")

destructure-case

eval-for-emacs
(apropos "eval-for-emacs")

(sb-kernel:make-null-lexenv)



https://www.softwarepreservation.org/projects/LISP/ History of LISP
https://40ants.com/lisp-project-of-the-day/2020/09/0192-cl-emb.html
https://github.com/dbohdan/embedded-scripting-languages

CLTL2 = Common Lisp the Language, 2nd Edition,
https://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html

https://all-things-andy-gavin.com/2011/02/02/making-crash-bandicoot-part-1/
https://all-things-andy-gavin.com/2011/03/12/making-crash-bandicoot-gool-part-9/ interactive is good
https://all-things-andy-gavin.com/2011/03/26/crash-bandicoot-teaching-an-old-dog-new-bits/
https://all-things-andy-gavin.com/2011/10/25/lispings-ala-john-mccarthy/

Address/memory management for a gigantic LISP environment or, GC considered harmful:
https://dl.acm.org/doi/abs/10.1145/800087.802797 


https://portacle.github.io/
https://news.ycombinator.com/item?id=16592333 flavio81 on March 15, 2018 | parent | favorite | on: Portacle – A Portable Common Lisp Development Envi...
https://news.ycombinator.com/item?id=28366292 Some thoughts about raising the profile of Lisp (liam-on-linux.livejournal.com)
https://www.dreamsongs.com/Files/Hopl2.pdf
https://www.dreamsongs.com/Files/HOPL2-Uncut.pdf

<edgar-rft> pjb once told me that in France a cdr is a "centre de
            repair", what is a place where cars are repaired. No
            wonder he's confused :-)

;; (find-books "__comp/__comp.el" "mccarthy58")

https://nongnu.org/txr/txr-lisp.html
http://www.codersnotes.com/notes/disassembling-jak/
https://news.ycombinator.com/item?id=28380246 Disassembling Jak and Daxter (2017) (codersnotes.com)

http://www.iqool.de/lispstick.html

https://renato.athaydes.com/posts/revenge_of_lisp.html ***

https://news.ycombinator.com/item?id=28815724 Lisp in a Weekend (github.com/fragglet)
https://news.ycombinator.com/item?id=29536703 Weird: Generative Art in Common Lisp (github.com/inconvergent)


https://letoverlambda.com/

https://news.ycombinator.com/item?id=28990878 History of Lisp (1979) [pdf] (stanford.edu)
http://jmc.stanford.edu/articles/lisp/lisp.pdf
(code-pdf-page "mccarthyhlisp79" "$S/http/jmc.stanford.edu/articles/lisp/lisp.pdf")
(code-pdf-text "mccarthyhlisp79" "$S/http/jmc.stanford.edu/articles/lisp/lisp.pdf")
# (find-mccarthyhlisp79page)
# (find-mccarthyhlisp79text)
# (find-mccarthyhlisp79page 5 "XIF(M,N1,N2)")
# (find-mccarthyhlisp79text 5 "XIF(M,N1,N2)")
# (find-mccarthyhlisp79page 11 "lexical scoping was wanted")
# (find-mccarthyhlisp79text 11 "lexical scoping was wanted")

https://lists.gnu.org/archive/html/emacs-orgmode/2021-10/msg00808.html Re: Evaluate or execute?

https://news.ycombinator.com/item?id=29006172 Why Lisp? (2015) (rongarret.info)
  This is the TXR Lisp interactive listener of TXR 271.
  Quit with :quit or Ctrl-D on an empty line. Ctrl-X ? for cheatsheet.
  1> '#J{"foo":[1,2,3,"bar"]}


https://news.ycombinator.com/item?id=29612209 Lisp in Vim with Slimv or Vlime (2019) (susam.in) - but I never coded interactively ***
https://malisper.me/debugging-lisp-part-1-recompilation/ ***
https://lisp-journey.gitlab.io/resources/


<fsbot`> grym, lol is [0/7] land of lisp - http://landoflisp.com/
<fsbot`> [1] ask me about ,spels
<fsbot`> [2] Let Over Lambda - http://letoverlambda.com/
<fsbot`> [3] lisp on lines, yet another abandoned partially
         implemented CL web framework, see
         https://github.com/drewc/lisp-on-lines ;;[ ,more / ,dump]

https://news.ycombinator.com/item?id=29855453 Land of Lisp (2010) (landoflisp.com)
https://news.ycombinator.com/item?id=29856110 Sketch: A Common Lisp environment for the creation of electronic art (github.com/vydd)
https://news.ycombinator.com/item?id=33162318 They Called It LISP for a Reason: List Processing (2005) (gigamonkeys.com)
https://news.ycombinator.com/item?id=31054796 Using SBCL Common Lisp as a Dynamic Library (mstmetent.blogspot.com)
https://github.com/coalton-lang/coalton

https://letoverlambda.com/
https://letoverlambda.com/index.cl/guest/chap5.html
https://letoverlambda.com/index.cl/guest/chap6.html

https://github.com/bendudson/py4cl

http://metamodular.com/common-lisp-semantics.html

https://news.ycombinator.com/item?id=32950465 Show HN: MathB.in – Mathematics pastebin written in Common Lisp (github.com/susam)
https://github.com/susam/mathb

https://www.cliki.net/cl-emacs
https://news.ycombinator.com/item?id=33054430 Emacs-like editors written in Common Lisp (cliki.net)

http://www.lispology.com/show?47N8 A minimal GIF decoder
http://www.lispology.com/show?3FY9 Haskell-like patterns in Lisp
http://www.lispology.com/show?20BD LispWorks drag and drop

# (find-fline "~/LOGS/2022dec28.emacs2" "<Catie> edrx: The book that got me going")
# (find-fline "~/LOGS/2022dec28.emacs2" "<Catie>" "Practical Common Lisp")

https://github.com/abochannek/flk
https://stereobooster.com/posts/make-a-lisp-review/
https://news.ycombinator.com/item?id=34300806 My encounter with Medley Interlisp (paoloamoroso.com)
https://news.ycombinator.com/item?id=34321090 Common Lisp: 2022 in review (lisp-journey.gitlab.io)
http://www.winestockwebdesign.com/Essays/Lisp_Curse.html
https://news.ycombinator.com/item?id=34609877 History of Lisp Parentheses (2019) (github.com/shaunlebron)
https://news.ycombinator.com/item?id=35936463 Successful Lisp: How to Understand and Use Common Lisp (1999) (labri.fr)
https://news.ycombinator.com/item?id=36107154 Steel Bank Common Lisp 2.3.5 released (sbcl.org)

(find-books "__comp/__comp.el" "clcrit")
(find-books "__comp/__comp.el" "clcrit" "A Critique of Common Lisp")

https://lispcookbook.github.io/cl-cookbook/regexp.html
https://www.cliki.net/regular%20expression
https://project-mage.org/ 


http://www.maclisp.info/
http://www.maclisp.info/pitmanual/number.html
http://www.maclisp.info/pitmanual/number.html#9.18

https://github.com/clasp-developers/clasp/wiki/How-to-run-maxima-in-clasp
https://ianthehenry.com/posts/generalized-macros/
https://github.com/ruricolist/spinneret In the crowded space of Common Lisp HTML generators...
https://news.ycombinator.com/item?id=37660025 Spinneret: A modern Common Lisp HTML generator (github.com/ruricolist)

https://cse.buffalo.edu/~shapiro/Commonlisp/commonLisp.pdf
https://news.ycombinator.com/item?id=37830342 Common Lisp: An Interactive Approach (1992) (buffalo.edu)
https://stackoverflow.com/questions/4982732/what-word-is-abbreviated-by-n-in-names-of-destructive-lisp-functions

https://google.github.io/styleguide/lispguide.xml
https://news.ycombinator.com/item?id=40046692 Google Common Lisp Style Guide (google.github.io)

https://drewsh.com/lisp-game-jam.html
https://spritely.institute/news/make-a-game-with-hoot-for-the-lisp-game-jam.html

https://simonsafar.com/2020/sbcl/ An exploration of SBCL internals
https://news.ycombinator.com/item?id=40115083 An Exploration of SBCL Internals (2020) (simonsafar.com)
https://github.com/fukamachi/qlot
https://news.ycombinator.com/item?id=41167921 Qlot: Common Lisp Library Manager (github.com/fukamachi)
https://blog.djhaskin.com/blog/common-lisp-community-survey-2024-results/
https://github.com/google/lisp-koans
https://reader.tymoon.eu/article/437 Porting SBCL to the Nintendo Switch
https://news.ycombinator.com/item?id=41530783 Porting SBCL to the Nintendo Switch (tymoon.eu)
https://www.maclisp.info/pitmanual/

https://www.cs.yale.edu/homes/dvm/format-stinks.html Eliminating FORMAT
https://stackoverflow.com/questions/11924667/common-lisp-is-there-a-less-painful-way-to-input-math-expressions infix
https://github.com/peey/ugly-tiny-infix-macro
https://www.cliki.net/infix
https://www.reddit.com/r/lisp/comments/ofgzog/learning_linear_algebra_using_common_lisp/ APL
https://github.com/CodyReichert/awesome-cl#matrix-libraries

# (find-google-links "regexp library for common lisp")

https://news.ycombinator.com/item?id=11823902 Show HN: Full Stack Lisp – A book in progress about writing Common Lisp apps (fullstacklisp.com)
https://langnostic.blogspot.com/2011/03/clsql-and-nothing-else.html
https://letoverlambda.com/index.cl/guest/chap4.html
https://letoverlambda.com/index.cl/guest/chap4.html ***
https://news.ycombinator.com/item?id=11834887 mikelevins on June 4, 2016 | parent | context | favorite | on: Show HN: Full Stack Lisp – A book in progress abou...
https://news.ycombinator.com/item?id=26065511 State of the Common Lisp ecosystem, 2020 (lisp-journey.gitlab.io)
https://news.ycombinator.com/item?id=22412148 Modern, functional Common Lisp: myths and best practices (ambrevar.xyz)
https://news.ycombinator.com/item?id=31120359 Common Lisp Resources (lisp-journey.gitlab.io)
https://www.youtube.com/watch?v=bl8jQ2wRh6k
https://news.ycombinator.com/item?id=10119730 State of the Common Lisp Ecosystem (eudoxia.me)
https://scribe.rip/the-tragedy-of-the-common-lisp-why-large-languages-explode-4e83096239b9
https://esdiscuss.org/topic/the-tragedy-of-the-common-lisp-or-why-large-languages-explode-was-revive-let-blocks

https://weitz.de/cl-recipes/ ***





#  Local Variables:
#  coding:               utf-8-unix
#  End: