norze.world is closing down. I moved to @veer66
After refactoring,
(defun diff-snode-by-range (snode r)
(loop for r1* in snode
nconc (diff-range r1* r)))
(defun diff-range-by-snode (r snode)
(reduce #'diff-snode-by-range
snode
:initial-value (list r)))
(defun diff-snode-when-snode2-is-not-null (snode1 snode2)
(sort (loop for r1 in snode1
nconc (diff-range-by-snode r1 snode2))
#'< :key #'(lambda (r) (cdr (assoc :s r)))))Yesterday, I thought I will forget what I wrote next week. I’ve forgotten it already.
(defun diff-snode-when-snode2-is-not-null (snode1 snode2)
(let ((snode1* '()))
(loop for r1 in snode1
do (let ((r1s (list r1)))
(loop for r2 in snode2
do (let ((r1s* '()))
(loop for r1* in r1s
do (let ((r3s (diff-range r1* r2)))
(loop for r in r3s
do (setq r1s* (cons r r1s*)))))
(setq r1s r1s*)))
(setq snode1* (nconc snode1* r1s))))
(sort snode1* #'< :key #'(lambda (r) (cdr (assoc :s r))))))I try to emulate Clojure’assoc on Common Lisp’s alist. #commonlisp #lisp #assoc #alist
(defun assoc* (m k v &key test)
(acons k
v
(remove-if (lambda (i)
(if test
(funcall test (car i) k)
(eq (car i) k)))
m))).emacs 2022-06-10
(require 'package)
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
("nongnu" . "https://elpa.nongnu.org/nongnu/")
("melpa" . "https://melpa.org/packages/")))
(add-hook 'emacs-lisp-mode-hook #'enable-paredit-mode)
(add-hook 'lisp-mode-hook #'enable-paredit-mode)
(add-hook 'lisp-interaction-mode-hook #'enable-paredit-mode)
(add-hook 'after-init-hook 'global-company-mode)Even without static typing, SBCL warns me when I type an incorrect variable name. The thing is that I need to read warnings. #commonlisp
; compilation unit finished ; Undefined variable: ; LINK ; caught 1 WARNING condition ; caught 1 STYLE-WARNING condition
Emacs failed to verify TLS certs. So I installed GNUTLS, Nettle, Idn, and Unistring.
#!/bin/bash
export PKG_CONFIG_PATH=$HOME/lib64/pkgconfig:$HOME/lib/pkgconfig
export LD_RUN_PATH=$HOME/lib:$HOME/lib64
export LD_LIBRARY_PATH=$HOME/lib:$HOME/lib64
export LDFLAGS="-L$HOME/lib -L$HOME/lib64"
rm -rf libunistring-1.0 libidn2-2.3.2 nettle-3.6 gmp-6.2.1 emacs-28.1
curl https://ftp.gnu.org/gnu/libunistring/libunistring-1.0.tar.gz | tar -xzvf - && \
pushd libunistring-1.0 && \
./configure --prefix=$HOME && \
make -j `nproc` && \
make install && \
popd || exit 1
curl https://ftp.gnu.org/gnu/libidn/libidn2-2.3.2.tar.gz | tar -xzvf - && \
pushd libidn2-2.3.2 && \
./configure --prefix=$HOME && \
make -j `nproc` && \
make install && \
popd || exit 1
curl https://ftp.gnu.org/gnu/nettle/nettle-3.6.tar.gz | tar xzvf - && \
pushd nettle-3.6 && \
./configure --prefix=$HOME --enable-mini-gmp && \
make -j `nproc` && \
make install && \
popd || exit 1
curl https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.6.tar.xz | tar xJvf - && \
pushd gnutls-3.7.6 && \
./configure --prefix=$HOME && \
make -j `nproc` && \
make install && \
cd .. || exit 1
curl http://ftp.gnu.org/pub/gnu/emacs/emacs-28.1.tar.gz | tar -xzvf - &&
pushd emacs-28.1 && \
./configure --prefix=$HOME --with-x-toolkit=no --with-xpm=no --with-jpeg=no --with-jpeg=no --with-gif=no --with-tiff=no --with-png=no && \
make -j `nproc` && \
make install && \
cd .. || exit 1
echo
echo
echo "Emacs 28.1 must be ready!"
echo
(ql:quickload :jonathan)
(defpackage #:group-imm
(:use :cl :jonathan))
(in-package :group-imm)
(defun normalize (key)
(intern key "KEYWORD"))
(defun count-them ()
(with-open-file (f "imm-small.ndjson")
(loop for line = (read-line f nil nil)
with i = 0
while line
as imm = (parse line
:as :alist
:keyword-normalizer #'normalize
:normalize-all t)
as src = (cdr (assoc :source imm))
when src do (let* ((tag (cdr (assoc :tag (car src))))
(len (length tag)))
(setq i (+ i len)))
finally
(return i))))
(count-them)
(time (count-them))