LINUX.ORG.RU

самодельный минилисп

 


0

4

нарисовал себе самодельный минилисп -

переделал лисповые имена на приличные, чтоб хоть конвенциальным процедурным программистом читалось

пример тест файла

(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)

★★★
Ответ на: комментарий от alysnix

для языков процедурных, - попробовать некоторые идеи оттуда, - сократить количество мусора внедрением процедурного стека, сделать читабельные классы(без классов я вообще не могу).

Будет лучше, чем Lily?

dataman ★★★★★
()
Ответ на: комментарий от alysnix

там вроде ссылка на документацию мертвая

Наверное, из-за этого:

This release is important for two reasons: One, that Lily turns 10 today. Two, that I am taking an indefinite hiatus from this project. I’m incredibly proud of what I’ve made, but I want to shift my focus to other, smaller projects.

Но это не отменяет его/её полезности. :)

dataman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.