Skip to content

Instantly share code, notes, and snippets.

@leetwinski
leetwinski / sicp1-19.lisp
Created December 26, 2019 20:38
sicp 1.19
(defun fib-iter (a b p q n)
(cond ((zerop n) b)
((evenp n) (fib-iter a
b
(+ (* p p) (* q q))
(+ (* 2 p q) (* q q))
(/ n 2)))
(t (fib-iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
@leetwinski
leetwinski / bin.lisp
Last active December 9, 2019 14:54
common lisp number<->bit-vector conversion
(defun num->bits (n)
(declare (type integer n))
(the bit-vector
(if (zerop n)
#*0
(loop
with len fixnum = (1+ (floor (log n 2)))
with res bit-vector = (make-array len :element-type 'bit)
for i fixnum below len
for curr integer = n then (ash curr -1)
@leetwinski
leetwinski / estimate-pi.lisp
Created December 5, 2019 21:07
monte carlo based PI estimation
(defun rand-test ()
(= 1 (gcd (random most-positive-fixnum)
(random most-positive-fixnum))))
(defun estimate-pi (attempts)
(loop repeat attempts
counting (rand-test) into success
finally (return (sqrt (/ 6 (/ success attempts))))))
(estimate-pi 1000000)
@leetwinski
leetwinski / encoding.lisp
Last active November 29, 2019 21:55
huffman encoding in common lisp
(defmacro if-let ((name val) t-branch nil-branch)
`(let ((,name ,val))
(if ,name ,t-branch ,nil-branch)))
(defstruct h-tree
content
weight
left
right)
@leetwinski
leetwinski / paip2.lisp
Created July 25, 2019 21:20
norwig, paip
(defpackage :paip2
(:use :common-lisp
:util)
(:export :sentence
:compose
:mappend
:*simple-grammar*
:*grammar*
:generate
:generate-tree))
import java.io.IOException;
import java.net.URI;
import java.nio.file.Paths;
import java.net.http.*;
import java.nio.file.*;
class App {
public static void main(String[] args) throws IOException, InterruptedException {
@leetwinski
leetwinski / multiplication.clj
Last active November 10, 2017 08:59
vec -> list to remove unneeded reverse
(defn mul [num-str m]
(let [[acc v] (reduce (fn [[acc v] ch]
(let [n (+ v (* m (Integer/parseInt (str ch))))]
[(conj acc (rem n 10))
(quot n 10)]))
[nil 0]
(reverse num-str))]
(apply str (if (zero? v) acc (conj acc v)))))
(mul "9876545679" 7)