Skip to content

Instantly share code, notes, and snippets.

View malisper's full-sized avatar

Michael Malis malisper

View GitHub Profile
(defmacro iter (&body body)
(with-gensyms (iter-block accumulate start)
(handler-case
(macroexpand-dammit:macroexpand-dammit
`(block ,iter-block
(let ((,accumulate nil))
(macrolet ((while (condition)
`(unless ,condition
(return-from ,',iter-block
(nreverse ,',accumulate))))
(defpackage :hardest-problem
(:nicknames :hard)
(:use :clamp :experimental :iter)
(:shadowing-import-from :experimental
:def :mac :fn :defmemo :coerce
:while :until :repeat :summing :with :in))
(in-package :hard)
(def know (possibilities)
@malisper
malisper / gist:fe2cf8158714c196ec03
Last active August 29, 2015 14:22
Trace of functions in CL-WHO
(macroexpand-1 '(with-html-output (*standard-output*)
(:p :align "right" "Here is some text with a part of it "
(:b "bolded."))))
;; The function trace
0: (TREE-TO-TEMPLATE
((:P :ALIGN "right" "Here is some text with a part of it "
(:B "bolded."))))
1: (PROCESS-TAG
@malisper
malisper / gist:610f691e7b3919d6a421
Created September 8, 2015 16:19
Macroexpansion of defasm
(progn
(let* ((#:*opcode-meta*1641 *opcode-meta*))
(let ((#:new1640 '(adc "Add to Accumulator with Carry" 6 2 indirect-x)))
(funcall #'(setf aref) #:new1640 #:*opcode-meta*1641 97)))
(let* ((#:*opcode-meta*1643 *opcode-meta*))
(let ((#:new1642 '(adc "Add to Accumulator with Carry" 3 2 zero-page)))
(funcall #'(setf aref) #:new1642 #:*opcode-meta*1643 101)))
(let* ((#:*opcode-meta*1645 *opcode-meta*))
(let ((#:new1644 '(adc "Add to Accumulator with Carry" 2 2 immediate)))
(funcall #'(setf aref) #:new1644 #:*opcode-meta*1645 105)))
>> (def test (seed)
(flet1 gen () (pop seed)
(ret result (vector 1 2 3)
(up i 0 3
(swap (aref result i) (aref result (gen)))))))
TEST
>> (test)
; Evaluation aborted on #<SB-INT:SIMPLE-PROGRAM-ERROR "invalid number of arguments: ~S" {1004E51A23}>.
>> (test '(0 0 0))
#(3 1 2)
(self-referential-version-of
'(lambda (self)
(format t
"#include <stdio.h>~%int main(){printf(\"%s\",~(~s~));}"
(remove #\newline (prin1-to-string self)))))
=>
>>>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++
(defun multiple (a b)
"Is A a multiple of B?"
(= (mod a b) 0))
(defun next-fraction (n fractions)
"Returns the next value of F in the Fractran program."
(find-if (lambda (f)
(integerp (* n f)))
fractions))
(2/5 7/51874849202 337186519813/7 3/2 19/33 253/19 17/3 31/17 41/31 29/17 29/23
47/29 59/47 43/29 43/41 4087/43 71/4087 79/71 89/79 73/71 73/59 101/8833
12463/101 97/73 109/97 127/109 107/97 107/103 137/107 149/137 131/107 131/127
23707/131 163/23707 173/163 89/173 167/163 167/149 191/222277 256883/191
181/167 199/181 223/199 197/181 197/193 229/197 239/229 227/197 227/223
60491/227 257/60491 269/257 89/269 263/257 263/239 281/3850583 4143403/281
277/263 307/277 313/307 293/277 293/283 331/293 347/331 317/293 317/313
123197/317 359/123197 373/359 89/373 367/359 367/347 389/59105717 63937247/389
383/367 409/383 421/409 401/383 401/397 433/401 443/433 431/401 431/421
205193/431 461/205193 467/461 89/467 463/461 463/443 491/820232743
(5/2 11/5 3/2 3/17 13/57 13/11 29/247 323/29 23/13 37/23 43/37 31/23 31/53
2773/31 61/3149 61/43 73/4087 3551/73 71/61 83/71 97/83 79/71 79/103 1919/79
7169/101 109/6313 109/97 127/6431 6077/127 113/109 137/113 149/137 131/113
131/157 163/131 173/163 151/131 151/181 179/28841 179/173 197/34189 34571/197
193/179 211/193 227/211 199/193 199/233 54731/199 241/4351 241/227 257/4579
4427/257 251/241 269/251 277/269 263/251 263/283 53671/263 5567/281 307/70027
307/277 313/73373 67637/313 311/307 331/311 347/331 317/311 317/353
349/5206666620054784675760045562843307267 349/347
367/5732260726811103633565476029754934499
5797959990155643503291154838118887903/367 359/349 379/68569 73153/379 373/359