لماذا لا تصنع Lisp الخاص بك للويب؟

هناك جافا سكريبت - شيء رائع. وهي جميلة في معظمها لأن أدوات تصحيح الأخطاء وأدوات التصحيح مدمجة في كل متصفح. بدون مصحح و مفتش شجرة DOM ، كان من الصعب تطوير أي شيء في JavaScript.


لذلك قررت أن أصاب Lisp الخاص بي ، ولكن مع مصحح جيد. أخذت قطعة صغيرة وبسيطة وأعيدت هيكلتها بنسبة 99٪. لقد قمت بشحذها عن طريق التنفيذ خطوة بخطوة وقمت بإنشاء IDE الخاص بي ، وهو بسيط ولكنه يعمل.


والنتيجة هي ما يلي.


صورة

تحولت اللغة نفسها إلى مزيج من Lisp و JavaScript ، لأنني كنت أعرف Lisp بشكل سيئ ، وكانت JavaScript جيدة :)


مزيد من أمثلة التعليمات البرمجية.


(alert document.location.href)

(setq x "ok!") 
(alert (x.substring 0 2))

;;   if

(setq x (prompt "Value of X:"))
(if (x == null)
    (setq x "(none)")
    (alert (+ "x = " x))
:else
    (alert (+ "x = " x))
)

;;   while/if      

(setq i 0)
(while (i < 10)
    (console.log i)
    (++ i)
)

;;       

(x < 2)                ;; -> (< x 2)
((x < 2) && (x > -1))  ;; -> (&& (< x 2) (> x -1))
((x < 2) || (x > -1))  ;; -> (|| (< x 2) (> x -1))
(x + 1 2 3)            ;; -> (+ x 1 2 3) => x+1+2+3
(x ++)                 ;; -> (++ x) 
(++ x y z)             ;; ->   1  x, y, z 

;;    JS-

(setq obj1 (new Object))
(setq obj1.a 123 obj1.b "abc") ;;    

(setq name "c")
(setq obj1.@name ())           ;; @ - 
(setq obj1.@name.0 111)
(setq obj1.@name.1 222)
(setq obj1.@name.2 333) 

(alert (obj1.c.join " "))      ;;  "111 222 333"

;;  -   

(defclass 
    :extends Object
    :instvars "_ "
    :classvars ""
    :constructor init
)

(setq . 0)

(defmeth .init ( ) (
    (setq this. )
    (setq this._ )
    (. ++)
))

(defmeth . () (
    (window.alert (+ "  №" this. "  " this._ "   !"))
))

(setq 1 (new  9 " "))
(1.)
(alert (+ " : " .))

;;     

((lambda (x y) (alert (x + y)) "a" "b")

(defun f1 (x) (alert (x + " - ok!")))
(f1 "f1")

;;    -     JS-

((new Function "msg" "alert(msg);") document.title)

;;    

(catch (a.b)) ;;  Exception object (Error: "a" is undefined!)

في الواقع ، مشروع github نفسه موجود هنا: https://github.com/SaemonZixel/littlelisp.js


في النهاية ، سأقول أن الشفرة تجريبية حتى الآن (اعتبارًا من 17 مايو 2020). هناك العديد من الأخطاء حتى الآن وأجدها ببطء وأصححها :(


ولكن بعد ذلك تمكن المصحح تقريبًا كما هو الحال في بيئات تطوير Smalltalk! :)


يمكنك إحضار الرمز مباشرة في المصحح. حدد أي جزء رمز وعرض النتيجة أو تشغيل مصحح أخطاء متداخلة.


All Articles