2
0

lisp.lisp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. ;; (setq lisp-indent-function 'common-lisp-indent-function)
  2. ;; (paredit-mode)
  3. ;; ________
  4. ;; /_ __/ /_ ___
  5. ;; / / / __ \/ _ \
  6. ;; / / / / / / __/
  7. ;; /_/ /_/ /_/\___/
  8. ;; __ _________ ____ ________ ____
  9. ;; / / / _/ ___// __ \ / ____/ /_ ____ _/ / /__ ____ ____ ____
  10. ;; / / / / \__ \/ /_/ / / / / __ \/ __ `/ / / _ \/ __ \/ __ `/ _ \
  11. ;; / /____/ / ___/ / ____/ / /___/ / / / /_/ / / / __/ / / / /_/ / __/
  12. ;; /_____/___//____/_/ \____/_/ /_/\__,_/_/_/\___/_/ /_/\__, /\___/
  13. ;; /____/
  14. ;;
  15. ;; The LISP Challenge
  16. ;;
  17. ;; Pick your favorite programming language
  18. ;; Implement the tiniest possible LISP machine that
  19. ;; Bootstraps John Mccarthy'S metacircular evaluator below
  20. ;; Winning is defined by lines of code for scripting languages
  21. ;; Winning is defined by binary footprint for compiled languages
  22. ;;
  23. ;; Listed Projects
  24. ;;
  25. ;; - 512 bytes: https://github.com/jart/sectorlisp
  26. ;; - 13 kilobytes: https://t3x.org/klisp/
  27. ;; - 47 kilobytes: https://github.com/matp/tiny-lisp
  28. ;; - 150 kilobytes: https://github.com/JeffBezanson/femtolisp
  29. ;; - Send pull request to be listed here
  30. ;;
  31. ;; @see LISP From Nothing; Nils M. Holm; Lulu Press, Inc. 2020
  32. ;; @see Recursive Functions of Symbolic Expressions and Their
  33. ;; Computation By Machine, Part I; John McCarthy, Massachusetts
  34. ;; Institute of Technology, Cambridge, Mass. April 1960
  35. ;; NIL ATOM
  36. ;; ABSENCE OF VALUE AND TRUTH
  37. NIL
  38. ;; CONS CELL
  39. ;; BUILDING BLOCK OF DATA STRUCTURES
  40. (CONS NIL NIL)
  41. (CONS (QUOTE X) (QUOTE Y))
  42. ;; REFLECTION
  43. ;; EVERYTHING IS AN ATOM OR NOT AN ATOM
  44. (ATOM NIL)
  45. (ATOM (CONS NIL NIL))
  46. ;; QUOTING
  47. ;; CODE IS DATA AND DATA IS CODE
  48. (QUOTE (CONS NIL NIL))
  49. (CONS (QUOTE CONS) (CONS NIL (CONS NIL NIL)))
  50. ;; LOGIC
  51. ;; BY WAY OF STRING INTERNING
  52. (EQ (QUOTE A) (QUOTE A))
  53. (EQ (QUOTE T) (QUOTE F))
  54. ;; FIND FIRST ATOM IN TREE
  55. ;; CORRECT RESULT OF EXPRESSION IS `A`
  56. ;; RECURSIVE CONDITIONAL FUNCTION BINDING
  57. (((FF X)
  58. ((QUOTE T) (FF X)))
  59. (QUOTE ((X)
  60. ((ATOM X) X)
  61. ((QUOTE T) (FF (CAR X)))))
  62. (QUOTE ((A) B C)))
  63. ;; LISP IN LISP
  64. ;; WITH LANGUAGE REFORMS
  65. (((ASSOC EVCON PAIRLIS EVLIS APPLY EVAL)
  66. ((QUOTE T)
  67. (EVAL (QUOTE (((FF X)
  68. ((QUOTE T) (FF X)))
  69. (QUOTE ((X)
  70. ((ATOM X) X)
  71. ((QUOTE T) (FF (CAR X)))))
  72. (QUOTE ((A) B C))))
  73. ())))
  74. (QUOTE ((X Y)
  75. ((EQ X (CAR (CAR Y))) (CDR (CAR Y)))
  76. ((QUOTE T) (ASSOC X (CDR Y)))))
  77. (QUOTE ((C A)
  78. ((EVAL (CAR (CAR C)) A)
  79. (EVAL (CAR (CDR (CAR C))) A))
  80. ((QUOTE T) (EVCON (CDR C) A))))
  81. (QUOTE ((X Y A)
  82. ((EQ X ()) A)
  83. ((QUOTE T) (CONS (CONS (CAR X) (CAR Y))
  84. (PAIRLIS (CDR X) (CDR Y) A)))))
  85. (QUOTE ((M A)
  86. ((EQ M ()) ())
  87. ((QUOTE T) (CONS (EVAL (CAR M) A)
  88. (EVLIS (CDR M) A)))))
  89. (QUOTE ((FN X A)
  90. ((ATOM FN)
  91. ((() ((EQ FN (QUOTE CAR)) (CAR (CAR X)))
  92. ((EQ FN (QUOTE CDR)) (CDR (CAR X)))
  93. ((EQ FN (QUOTE ATOM)) (ATOM (CAR X)))
  94. ((EQ FN (QUOTE CONS)) (CONS (CAR X) (CAR (CDR X))))
  95. ((EQ FN (QUOTE EQ)) (EQ (CAR X) (CAR (CDR X))))
  96. ((QUOTE T) (APPLY (EVAL FN A) X A)))))
  97. ((QUOTE T)
  98. (EVCON (CDR FN) (PAIRLIS (CAR FN) X A)))))
  99. (QUOTE ((E A)
  100. ((EQ E ()) ())
  101. ((ATOM E) (ASSOC E A))
  102. ((ATOM (CAR E))
  103. ((() ((EQ (CAR E) (QUOTE QUOTE)) (CAR (CDR E)))
  104. ((QUOTE T) (APPLY (CAR E) (EVLIS (CDR E) A) A)))))
  105. ((QUOTE T) (APPLY (CAR E) (EVLIS (CDR E) A) A)))))