mirror of
https://github.com/samsonjs/sectorlisp.git
synced 2026-03-25 09:05:48 +00:00
113 lines
3.7 KiB
Common Lisp
113 lines
3.7 KiB
Common Lisp
;; (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)))))
|