2
0

lisp.lisp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. ;; - 836 bytes: https://github.com/jart/sectorlisp
  26. ;; - 13 kilobytes: https://t3x.org/klisp/
  27. ;; - 150 kilobytes: https://github.com/JeffBezanson/femtolisp
  28. ;; - Send pull request to be listed here
  29. ;;
  30. ;; @see LISP From Nothing; Nils M. Holm; Lulu Press, Inc. 2020
  31. ;; @see Recursive Functions of Symbolic Expressions and Their
  32. ;; Computation By Machine, Part I; John McCarthy, Massachusetts
  33. ;; Institute of Technology, Cambridge, Mass. April 1960
  34. ;; NIL ATOM
  35. ;; ABSENCE OF VALUE AND TRUTH
  36. NIL
  37. ;; CONS CELL
  38. ;; BUILDING BLOCK OF DATA STRUCTURES
  39. (CONS NIL NIL)
  40. (CONS (QUOTE X) (QUOTE Y))
  41. ;; REFLECTION
  42. ;; EVERYTHING IS AN ATOM OR NOT AN ATOM
  43. (ATOM NIL)
  44. (ATOM (CONS NIL NIL))
  45. ;; QUOTING
  46. ;; CODE IS DATA AND DATA IS CODE
  47. (QUOTE (CONS NIL NIL))
  48. (CONS (QUOTE CONS) (CONS NIL (CONS NIL NIL)))
  49. ;; LOGIC
  50. ;; BY WAY OF STRING INTERNING
  51. (EQ (QUOTE A) (QUOTE A))
  52. (EQ (QUOTE T) (QUOTE F))
  53. ;; FIND FIRST ATOM IN TREE
  54. ;; CORRECT RESULT OF EXPRESSION IS `A`
  55. ;; RECURSIVE CONDITIONAL FUNCTION BINDING
  56. ((LAMBDA (FF X) (FF X))
  57. (QUOTE (LAMBDA (X)
  58. (COND ((ATOM X) X)
  59. ((QUOTE T) (FF (CAR X))))))
  60. (QUOTE ((A) B C)))
  61. ;; LISP IMPLEMENTED IN LISP
  62. ;; WITHOUT ANY SUBJECTIVE SYNTACTIC SUGAR
  63. ;; RUNS "FIND FIRST ATOM IN TREE" PROGRAM
  64. ;; CORRECT RESULT OF EXPRESSION IS STILL `A`
  65. ;; REQUIRES CONS CAR CDR QUOTE ATOM EQ LAMBDA COND
  66. ;; SIMPLIFIED BUG FIXED VERSION OF JOHN MCCARTHY PAPER
  67. ((LAMBDA (ASSOC EVCON BIND APPEND EVAL)
  68. (EVAL (QUOTE ((LAMBDA (FF X) (FF X))
  69. (QUOTE (LAMBDA (X)
  70. (COND ((ATOM X) X)
  71. ((QUOTE T) (FF (CAR X))))))
  72. (QUOTE ((A) B C))))
  73. NIL))
  74. (QUOTE (LAMBDA (X E)
  75. (COND ((EQ E NIL) NIL)
  76. ((EQ X (CAR (CAR E))) (CDR (CAR E)))
  77. ((QUOTE T) (ASSOC X (CDR E))))))
  78. (QUOTE (LAMBDA (C E)
  79. (COND ((EVAL (CAR (CAR C)) E) (EVAL (CAR (CDR (CAR C))) E))
  80. ((QUOTE T) (EVCON (CDR C) E)))))
  81. (QUOTE (LAMBDA (V A E)
  82. (COND ((EQ V NIL) E)
  83. ((QUOTE T) (CONS (CONS (CAR V) (EVAL (CAR A) E))
  84. (BIND (CDR V) (CDR A) E))))))
  85. (QUOTE (LAMBDA (A B)
  86. (COND ((EQ A NIL) B)
  87. ((QUOTE T) (CONS (CAR A) (APPEND (CDR A) B))))))
  88. (QUOTE (LAMBDA (E A)
  89. (COND
  90. ((ATOM E) (ASSOC E A))
  91. ((ATOM (CAR E))
  92. (COND
  93. ((EQ (CAR E) NIL) (QUOTE *UNDEFINED))
  94. ((EQ (CAR E) (QUOTE QUOTE)) (CAR (CDR E)))
  95. ((EQ (CAR E) (QUOTE ATOM)) (ATOM (EVAL (CAR (CDR E)) A)))
  96. ((EQ (CAR E) (QUOTE EQ)) (EQ (EVAL (CAR (CDR E)) A)
  97. (EVAL (CAR (CDR (CDR E))) A)))
  98. ((EQ (CAR E) (QUOTE CAR)) (CAR (EVAL (CAR (CDR E)) A)))
  99. ((EQ (CAR E) (QUOTE CDR)) (CDR (EVAL (CAR (CDR E)) A)))
  100. ((EQ (CAR E) (QUOTE CONS)) (CONS (EVAL (CAR (CDR E)) A)
  101. (EVAL (CAR (CDR (CDR E))) A)))
  102. ((EQ (CAR E) (QUOTE COND)) (EVCON (CDR E) A))
  103. ((EQ (CAR E) (QUOTE LAMBDA)) E)
  104. ((QUOTE T) (EVAL (CONS (EVAL (CAR E) A) (CDR E)) A))))
  105. ((EQ (CAR (CAR E)) (QUOTE LAMBDA))
  106. (EVAL (CAR (CDR (CDR (CAR E))))
  107. (BIND (CAR (CDR (CAR E))) (CDR E) A)))))))