diff --git a/sbcl/.gitignore b/sbcl/.gitignore deleted file mode 100644 index bb16faa..0000000 --- a/sbcl/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.sbclrc diff --git a/sbcl/.sbclrc b/sbcl/.sbclrc new file mode 100644 index 0000000..867959c --- /dev/null +++ b/sbcl/.sbclrc @@ -0,0 +1,69 @@ +;; -*- mode: lisp; -*- + +;;; The following lines added by ql:add-to-init-file: +#-quicklisp +(let ((quicklisp-init (merge-pathnames ".local/share/quicklisp/setup.lisp" + (user-homedir-pathname)))) + (when (probe-file quicklisp-init) + (load quicklisp-init))) + +(defun primep (number) + (unless (= number 1) + (let ((max (floor (sqrt number)))) + (or (= number 2) + (and (not (evenp number)) + (= (length (loop for i from 3 upto max by 2 + if (integerp (/ number i)) + if (< 1 i number) + do (return-from primep nil) + else + collect i)) + 0)))))) + +(defun next-prime (number) + (loop for i from (1+ number) + if (primep i) + return i)) + +(defun previous-prime (number) + (loop for i from (1- number) downto 0 + if (primep i) + return i)) + +(defun primes (number) + (do ((prime 2 (next-prime prime)) + (primes (list))) + ((> prime number) (reverse primes)) + (setf primes (cons prime primes)))) + +(defun prime-factors (number) + (do ((i 1 (1+ i))) + ((> i (/ number 2)) (list number)) + (let ((d (/ number i))) + (if (and (integerp d) (primep i)) + (return (cons i (prime-factors d))))))) + +(defun largest-prime-factor (number) + (apply #'max (prime-factors number))) + +(defun start-local-server () + (ql:quickload "usocket") + (usocket:socket-server + "localhost" 4006 + (lambda (stream) + (handler-case + (let ((*standard-input* stream) + (*standard-output* stream) + (type (read stream))) + (case type + (:eval + (princ (eval (read))) + (force-output)) + (:shell + (loop + (fresh-line) + (princ "CL> " stream) + (force-output) + (print (eval (read))))))) + (end-of-file () nil))) + () :in-new-thread t :multi-threading t))