-
Notifications
You must be signed in to change notification settings - Fork 0
Yatl - Yet another toy Lisp. Definitely not yet ready for primetime. The name is a homage to Maclisp.
License
aarvid/SmackLisp
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
SmackLisp Version 0.01
SmackLisp is a toy lisp-2 interpreter. Currently Smacklisp is small subset of Common Lisp. That is smacklisp code should run in any common lisp implementation but not vice versa. Smacklisp is designed basically to be a scripting language to be used client-side on a web-site.
Long-term plans include a compiler and maybe a scheme interpreter.
Smacklisp also plans to be configurable, that is certain parts can be disabled (example: configure without looping macros to force use of recursion).
Code/ideas stolen from Norvig, PAIP and Queinnec, Lisp in Small Pieces
Currently Implemented:
Evaluation and Compilation
-- constantp
-- lambda
-- quote
Control and data flow
-- and
-- apply
-- block/return/return-from (not 100% compatible with CL)
-- case
-- complement
-- cond
-- constantly
-- defconstant
-- defparameter
-- defun (no &aux, no setf, declares)
-- defvar
-- eq, eql, equal, equalp
-- every
-- fboundp
-- fdefinition (no setf)
-- flet
-- fmakunbound
-- funcall
-- function (no setf)
-- functionp
-- identity
-- if
-- labels
-- let, let*
-- multiple-value-bind
-- multiple-value-call
-- multiple-value-list
-- not
-- notany
-- notevery
-- or
-- prog prog* (no declares)
-- prog1
-- prog2
-- progn
-- psetf
-- psetq
-- setf (limited setf-able functions)
-- setq
-- some
-- tagbody/go
-- unless
-- when
Structures
-- copy-structure
-- defstruct (no options)
Iteration
-- do
-- do*
-- dolist
-- dotimes
Symbols:
-- boundp
Numbers
-- + - * / = < > <= >= /=
-- decf
-- incf
-- abs acos acosh ash asin asinh atan atanh
-- boole byte
-- ceiling cis complex complexp conjugate cos cosh
-- decode-float denominator
-- evenp exp expt
-- fceiling ffloor float floatp float-sign floor fround ftruncate
-- gcd
-- imagpart integerp isqrt
-- lcm log
-- max min minusp mod
-- numberp numerator
-- oddp
-- parse-integer phase plusp
-- rational rationalize rationalp realp realpart rem round
-- signum sin sinh sqrt
-- tan tanh truncate
-- zerop
-- 1+ 1-
Conses
-- adjoin
-- append
-- atom
-- butlast, nbutlast
-- car (setf)
-- cdr (setf)
-- cxxr (setf)
-- cons
-- consp
-- copy-list
-- first, second, ... tenth (setf)
-- last
-- ldiff
-- list
-- list*
-- list-length
-- listp
-- make-list
-- mapc mapcan mapcar mapcon mapl maplist
-- member
-- member-if
-- nconc
-- nreconc
-- nth (setf)
-- nthcdr
-- null
-- pop
-- push
-- pushnew
-- rest (setf)
-- revappend
-- rplaca
-- rplacd
Conses - Associated Lists
-- acons
-- assoc
-- assoc-if
-- copy-alist
-- pairlis
-- rassoc
-- rassoc-if
Conses - Sets
-- subsetp
-- intersection
-- nintersection
-- set-difference
-- nset-difference
-- set-exclusive-or
-- nset-exclusive-or
-- union
-- nunion
Conses - Trees
-- copy-tree
-- tree-equal
-- subst
-- nsubst
-- subst
-- nsubst
-- tree
-- sublis
-- nsublis
Arrays
-- adjustable-array-p
-- adjust-array
-- aref
-- array-dimension
-- array-dimensions
-- array-displacement
-- array-element-type
-- array-has-fill-pointer-p
-- array-in-bounds-p
-- arrayp
-- array-rank
-- array-row-major-index
-- array-total-size
-- make-array
-- row-major-aref
-- simple-vector-p
-- svref
-- vector
-- vectorp
-- vector-pop
-- vector-push
-- vector-push-extend
Strings
-- char
-- make-string
-- schar
-- simple-string-p
-- string
-- string-capitalize
-- nstring-capitalize
-- string-downcase
-- nstring-downcase
-- string-upcase
-- nstring-upcase
-- string-equal
-- string-greaterp
-- string-left-trim
-- string-lessp
-- string-not-equal
-- string-not-greaterp
-- string-not-lessp
-- stringp
-- string-right-trim
-- string-trim
-- string=
-- string/=
-- string<
-- string>
-- string<=
-- string>=
Sequences
-- concatenate
-- copy-seq
-- count
-- count-if
-- elt
-- fill
-- find
-- find-if
-- length
-- make-sequence
-- map
-- map-into
-- merge
-- mismatch
-- position
-- position-if
-- reduce
-- remove
-- delete
-- remove-duplicates
-- delete-duplicates
-- remove-if
-- delete-if
-- replace
-- reverse
-- nreverse
-- search
-- sort
-- stable-sort
-- subseq
-- substitute
-- nsubstitute
-- substitute-if
-- nsubstitute-if
Hash Tables
-- clrhash
-- gethash
-- hash-table-count
-- hash-table-p
-- hash-table-rehash-size
-- hash-table-rehash-threshold
-- hash-table-size
-- hash-table-test
-- make-hash-table
-- maphash
-- remhash
-- sxhash
Printer
-- prin1
-- princ
-- print
-- terpri
Reader
-- read (but not remotely)
System Construction
-- load
Constants and Variables
-- nil
-- pi
-- t
-- * ** ***
-- + ++ +++
-- / // ///
-- -
-- all the constants in SBCL package common-lisp
(let ((l nil))
(do-all-symbols (x)
(when (and (constantp x)
(eq (find-package 'common-lisp)
(symbol-package x)))
(push x l)))
(sort (remove-duplicates l) 'string<))
Non Common Lisp Function
-- quit (exit repl loop)
Currently Lacks:
Plan to implement:
Types
Tail-recursion
Macros (Internal exists, user not yet)
Unit tests
configurable
Hope to implement
Documentation strings
declarations (at least allow)
CLOS
Streams
Maybe
LOOP
Eval
Debugging
lambda list: &aux &allow-other-keys
No plans to Implement
Condition handling
Packages
Deprecated functions
Read Macros
About
Yatl - Yet another toy Lisp. Definitely not yet ready for primetime. The name is a homage to Maclisp.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published