As one of the few homoiconic languages, Lisp is able to treat any/all of it's own source code as lisp data structures, which in turn allows lisp programs to create, alter, and run lisp code "on the fly". This is supported through lisp's set of higher order functions (functions that take functions as parameters) such as eval, apply, map, funcall, etc. Some of the other homoiconic languages include: - lisp derivatives scheme, racket, closure - math processing languages mathematica, wolfram, julia - the logic programming language prolog - the string processing language snobol - the tool command language tcl