123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- ;; (setq lisp-indent-function 'common-lisp-indent-function)
- ;; (paredit-mode)
- ;; ________
- ;; /_ __/ /_ ___
- ;; / / / __ \/ _ \
- ;; / / / / / / __/
- ;; /_/ /_/ /_/\___/
- ;; __ _________ ____ ________ ____
- ;; / / / _/ ___// __ \ / ____/ /_ ____ _/ / /__ ____ ____ ____
- ;; / / / / \__ \/ /_/ / / / / __ \/ __ `/ / / _ \/ __ \/ __ `/ _ \
- ;; / /____/ / ___/ / ____/ / /___/ / / / /_/ / / / __/ / / / /_/ / __/
- ;; /_____/___//____/_/ \____/_/ /_/\__,_/_/_/\___/_/ /_/\__, /\___/
- ;; /____/
- ;;
- ;; The LISP Challenge
- ;;
- ;; Pick your favorite programming language
- ;; Implement the tiniest possible LISP machine that
- ;; Bootstraps John Mccarthy'S metacircular evaluator below
- ;; Winning is defined by lines of code for scripting languages
- ;; Winning is defined by binary footprint for compiled languages
- ;;
- ;; Listed Projects
- ;;
- ;; - 512 bytes: https://github.com/jart/sectorlisp
- ;; - 13 kilobytes: https://t3x.org/klisp/
- ;; - 47 kilobytes: https://github.com/matp/tiny-lisp
- ;; - 150 kilobytes: https://github.com/JeffBezanson/femtolisp
- ;; - Send pull request to be listed here
- ;;
- ;; @see LISP From Nothing; Nils M. Holm; Lulu Press, Inc. 2020
- ;; @see Recursive Functions of Symbolic Expressions and Their
- ;; Computation By Machine, Part I; John McCarthy, Massachusetts
- ;; Institute of Technology, Cambridge, Mass. April 1960
- ;; NIL ATOM
- ;; ABSENCE OF VALUE AND TRUTH
- NIL
- ;; CONS CELL
- ;; BUILDING BLOCK OF DATA STRUCTURES
- (CONS NIL NIL)
- (CONS (QUOTE X) (QUOTE Y))
- ;; REFLECTION
- ;; EVERYTHING IS AN ATOM OR NOT AN ATOM
- (ATOM NIL)
- (ATOM (CONS NIL NIL))
- ;; QUOTING
- ;; CODE IS DATA AND DATA IS CODE
- (QUOTE (CONS NIL NIL))
- (CONS (QUOTE CONS) (CONS NIL (CONS NIL NIL)))
- ;; LOGIC
- ;; BY WAY OF STRING INTERNING
- (EQ (QUOTE A) (QUOTE A))
- (EQ (QUOTE T) (QUOTE F))
- ;; FIND FIRST ATOM IN TREE
- ;; CORRECT RESULT OF EXPRESSION IS `A`
- ;; RECURSIVE CONDITIONAL FUNCTION BINDING
- (((FF X)
- ((QUOTE T) (FF X)))
- (QUOTE ((X)
- ((ATOM X) X)
- ((QUOTE T) (FF (CAR X)))))
- (QUOTE ((A) B C)))
- ;; LISP IN LISP
- ;; WITH LANGUAGE REFORMS
- (((ASSOC EVCON PAIRLIS EVLIS APPLY EVAL)
- ((QUOTE T)
- (EVAL (QUOTE (((FF X)
- ((QUOTE T) (FF X)))
- (QUOTE ((X)
- ((ATOM X) X)
- ((QUOTE T) (FF (CAR X)))))
- (QUOTE ((A) B C))))
- ())))
- (QUOTE ((X Y)
- ((EQ X (CAR (CAR Y))) (CDR (CAR Y)))
- ((QUOTE T) (ASSOC X (CDR Y)))))
- (QUOTE ((C A)
- ((EVAL (CAR (CAR C)) A)
- (EVAL (CAR (CDR (CAR C))) A))
- ((QUOTE T) (EVCON (CDR C) A))))
- (QUOTE ((X Y A)
- ((EQ X ()) A)
- ((QUOTE T) (CONS (CONS (CAR X) (CAR Y))
- (PAIRLIS (CDR X) (CDR Y) A)))))
- (QUOTE ((M A)
- ((EQ M ()) ())
- ((QUOTE T) (CONS (EVAL (CAR M) A)
- (EVLIS (CDR M) A)))))
- (QUOTE ((FN X A)
- ((ATOM FN)
- ((() ((EQ FN (QUOTE CAR)) (CAR (CAR X)))
- ((EQ FN (QUOTE CDR)) (CDR (CAR X)))
- ((EQ FN (QUOTE ATOM)) (ATOM (CAR X)))
- ((EQ FN (QUOTE CONS)) (CONS (CAR X) (CAR (CDR X))))
- ((EQ FN (QUOTE EQ)) (EQ (CAR X) (CAR (CDR X))))
- ((QUOTE T) (APPLY (EVAL FN A) X A)))))
- ((QUOTE T)
- (EVCON (CDR FN) (PAIRLIS (CAR FN) X A)))))
- (QUOTE ((E A)
- ((EQ E ()) ())
- ((ATOM E) (ASSOC E A))
- ((ATOM (CAR E))
- ((() ((EQ (CAR E) (QUOTE QUOTE)) (CAR (CDR E)))
- ((QUOTE T) (APPLY (CAR E) (EVLIS (CDR E) A) A)))))
- ((QUOTE T) (APPLY (CAR E) (EVLIS (CDR E) A) A)))))
|