нарисовал себе самодельный минилисп -
переделал лисповые имена на приличные, чтоб хоть конвенциальным процедурным программистом читалось
пример тест файла
(module TestModule)
(import Module1 Module2 Module3)
(fun TITLE(ftext)
(comment "print title title")
(fun line() (println "\n#####################################"))
(line)(print ftext)(line) )
(TITLE "BEGIN TESTS")
(fun print_mem () (println "mem used " (mem-used) " bytes"))
(print_mem)
;;//======================================
(fun print_sym_count ()
(println "Sybols count: " (list-length ^Symbols)))
(fun print_symbols()
(comment "print registered symbols")
(println "Registered Symbols ======\n"
(symbols)
"\n ======= end of symbols")
(print_sym_count))
(print_symbols); ///print predefined symbols
(print_sym_count)
;;//===========================
(println (not t) "not t")
(println (not ()) "not ()")
;;(halt)
;;//================================
;; /// operators
(define _ " ")
(fun ++ (fval) (inc fval))
(fun -- (fval) (dec fval))
;;///arithmetic shift
;;================================
(enum MyEnum (a1 . "abs") (a2 . "ddd") (a3 . "test") )
(enum MyEnum1 (a1 . 10) (a2 . 20) (a3 . 30) )
;;//(var i MyEnum1 [a1] )
(class TestClass
(var x 0)
(var y 0)
(var z 0)
(var
(a int 0)
(b int 0)
(c int 0)
)
(fun print_() ( print x y z))
(override fff() 100)
(ctor () ())
(ctor (fint) (setq x fint))
)
(const t 100)
;//================================
(fun read(fstream) (println "read go") 0)
(fun write(fstream) 1)
(read 100)
;//================================
(var xx 10)
(println "test increment: ++10 is:" (++ xx))
;//=================================
(fun sqr(x) (* x x))
(println "sqr of 7 = " (sqr 7))
(var yy 16) (println "shr 16 = " (shr yy))
(setq yy 16) (println "shl 16 = " (shl yy))
(var _name0 "sidor")
(var _name1 "sidorov")
(println (+ "author: " _name0 _ _name1))
(var lline (+ "new author: " _name0 _ _name1))
(println lline)
(println "a" _ "b" _ "c")
;//==================================
(fun check (fexpr ftext) ( println ftext ":" fexpr) )
(fun assert(fbool ftext)(
if (not fbool) (println ftext)))
(fun check_lambda ()
(var llx (lambda () (print "it is lambda!!!")))
(llx)
)
(check_lambda)
(assert (< 100 1) "assert works!!!")
(check (< 11 10) "must be false")
(check (> 11 10) "must be true")
(check (eq _name0 "vova") "must be true")
;//===================================
(fun test_loop (flim)
(var li flim) (while (> li 0) (print li " ") (dec li))
;;(var i 0) (while (< i flim) (print i " ") (inc i))
)
(fun do_test (fname ftestfun)
(println fname) ftestfun)
(do_test "SOME_TEST: " (test_loop 10) )
;(do_test "SOME_TEST: " ())
(fun check_order ()
(comment "check order")
(print "test_order: ")
(print "1 ")(print "2 ")(print "3 \n"))
(check_order)
(println "test 1") (test_loop 5)
(println "test 2") (test_loop 3)
;//===================================
;;(print_symbols)
(TITLE " END TESTS")
(print_mem)
(check (garbage-collect) "garbage collect")
(print_mem)
(print "\nenter char to exit >") (getchar)
;;//(print "\nenter char to exit >") (getchar)