summaryrefslogtreecommitdiffstats
path: root/sbcl/.sbclrc
blob: 867959c77f7465e0436b04c6522ea34c1839d8a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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))