рд▓рд┐рд╕реНрдХрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рд▓рд┐рд╕реНрдк-рд╢реИрд▓реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ

* рдпрд╣ рдбреЗрд▓реАрдЬреЗрдПрд╕ рдХреЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ

рдкрд░рд┐рдЪрдп


LispyScript рдПрдХ рдкреЗрдбрд╝ рдХреА рддрд░рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╣реИред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд▓рд┐рд╕реНрдк рдХреЗ рдмреАрдЪ рдХреБрдЫ рд╣реИред
рд▓рд┐рд╕реНрдкреА рд▓рд┐рдкрд┐ рдореЗрдВ рд╕рдорд╛рди рднрд╛рд╡ рд╣реЛрддреЗ рд╣реИрдВ:
(<function> arg1 arg2 arg3 ...) 


рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рддреА рд╣реИ (рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ)ред
рдкрд╣рд▓рд╛ рддрддреНрд╡ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрд╛рдХреА рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
 (console.log "abc") 

рд╣рд╛рдВ, рдореИрдВ рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛: рдЖрдк рдпрд╣рд╛рдВ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  (console.log "2 + 2 = %d" (+ 2 2)) 

рдЦреИрд░, рдЬреЗрдПрд╕ рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
  console.log("2 + 2 = %d", (2 + 2)); 


рд╣рдо рд╕рднреА рдкрд░рд┐рдЪрд┐рдд HTML рд╕рдВрд░рдЪрдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ:
 <html lang="en"> <head> <title>My Home Page</title> </head> <body> <h1>Welcome to LispyScript</h1> </body> </html> 


рд▓рд┐рд╕реНрдкреА рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИ:
 (html {lang: "en"} (head (title "My Home Page")) (body (h1 "Welcome to LispyScript"))) 


рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЕрдм рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдореИрдХреНрд░реЛ


рд▓рд┐рд╕реНрдлреА рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХред рдореИрдХреНрд░реЛрдЬрд╝ рдЬреЗрдПрд╕ рдореЗрдВ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рдВрдХрд▓рдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░рд┐рдВрдЯ рдореИрдХреНрд░реЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 (macro print (str rest...) (console.log ~str ~rest...)) (print "Hello print macro!") (print "2 + 2 = %d" (+ 2 2)) 

 console.log("Hello print macro!") console.log("2 + 2 = %d", (2 + 2)); 


рдЙрдкрд░реЛрдХреНрдд рдореИрдХреНрд░реЛ рд▓рд┐рд╕реНрдлреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореИрдХреНрд░реЛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдХреНрд░реЛ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЛрд╖реНрдардХ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░, рдФрд░ рдлрд┐рд░ рд╡рд╣ рдХреЛрдб рдЬрд┐рд╕рдореЗрдВ рдореИрдХреНрд░реЛ рдХреЙрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
~ рдСрдкрд░реЗрдЯрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред рдЪрд░ рдмрд╛рдХреА ... рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкрд╛рд░рд┐рдд рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕рдВрдХрд▓рдХ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдкрд╣рд▓реЗ, рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдХреЛрдб рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рд╕реЗ
  (print "Hello print macro!") 

рд╡рд╣ рдмрдирд╛рддрд╛ рд╣реИ:
  (console.log "Hello print macro!") 

рдЦреИрд░, рдлрд┐рд░ рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣:
  (print "2 + 2 = %d" (+ 2 2)) ; lispy 

 (console.log "2 + 2 = %d" (+ 2 2)) ; lispy 

  console.log("2 + 2 = %d", (2 + 2)); // js 


рдПрдХ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИ, рдореИрдХреНрд░реЛ рдХреЗ рдмрдЬрд╛рдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЖрдЗрдП рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
 (var print (function (data value) (console.log data value))) 


рдЕрдм рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
 //  console.log("2 + 2 = %d", (2 + 2)); //  var print = function(data,value) { return console.log(data,value); }; print("2 + 2 = %d",(2 + 2)); 


рдПрдХ рдореИрдХреНрд░реЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ!

рдЖрдкрдХреЛ рдореИрдХреНрд░реЛ рд╕реЗ рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рдЕрдХреНрд╕рд░ рдореИрдХреНрд░реЛ рдХреЗ рдмрдЬрд╛рдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг: рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд░реНрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдХреНрд░реЛ рд▓рд┐рдЦреЗрдВ:
 (macro square (x) (* ~x ~x)) (console.log (square 2)) 

рдФрд░ рдпрд╣ рдХреЛрдб рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЖрдЙрдЯрдкреБрдЯ 4. рдЬреЗрдПрд╕ рдореЗрдВ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 console.log((2 * 2)); 


рдЕрдм рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
 (var i 2) (console.log (square i++)) 

рдФрд░ рд╣рдо 9 рдХреЗ рдмрдЬрд╛рдп 6 рдирдВрдмрд░ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:
 var i = 2; console.log((i++ * i++)); 


рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд╣реАрдВред рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдФрд░ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓рд┐рд╕реНрдмреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдХреНрд░реЛрдЬрд╝ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреБрдирд╢реНрдЪ


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рд╣реИред рд╕рдЪ рд╣реИ, рдпрд╣ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рд╣реИред
рдпреБрдкреАрдбреАред рдЕрдзрд┐рдХ рдХреНрд▓реЛрдЬреНрдпреЛрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ , рдЕрдЦрдВрдб рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

Source: https://habr.com/ru/post/In152119/


All Articles