ããã¯ãUbuntu OnlineãFedora OnlineãWindows ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒããŸã㯠MAC OS ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãªã©ã®è€æ°ã®ç¡æãªã³ã©ã€ã³ ã¯ãŒã¯ã¹ããŒã·ã§ã³ã® XNUMX ã€ã䜿çšããŠãOnWorks ç¡æãã¹ãã£ã³ã° ãããã€ããŒã§å®è¡ã§ããã³ãã³ã hy ã§ãã
ããã°ã©ã ïŒ
NAME
hy - hy ããã¥ã¡ã³ã [ç»å: Hy] [ç»å]
æå³ã«åºã¥ããŠãé©åãªã¡ãã»ãŒãžãé©åãªãŠãŒã¶ãŒã«é©åãªã¿ã€ãã³ã°ã§ Hy https://try-hy.appspot.com
PyPI https://pypi.python.org/pypi/hy
ãœãŒã¹ https://github.com/hylang/hy
ãªã¹ã ãã€ã©ã³ãã£ã¹ã«ãã·ã§ã³
IRC #ã〠ããªãŒããŒãäž
å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã status
ãã©ãã¹ CI.ã€ã³ãã³ããªã
Hy ã¯ãPython ã«çµã¿èŸŒãŸãã Lisp ã®çŽ æŽãããæ¹èšã§ãã
Hy ã¯ãã® Lisp ã³ãŒãã Python æœè±¡æ§æããªãŒã«å€æããã®ã§ã次ã®ããã«ãªããŸãã
Python ã®çŸããäžçå šäœã Lisp 圢åŒã§ããã«å©çšã§ããŸãã
å 容ïŒ
ã¯ã€ãã¯ã¹ã¿ãŒã
[ç»å: ã«ã¬ã³ã»ã©ã¹ã¿ãŒãã®æ±æ] [ç»å]
(æ±ã£ãããŠãããã«ã¬ã³ã»ã©ã¹ã¿ããã«æè¬!)
HOW ã« GET HY ãªã¢ã« ã¹ããŒãã£ãŒ:
1ã äœæãã ããŒãã£ã« Python ç°å¢.
2. ä»®æ³ Python ç°å¢ãã¢ã¯ãã£ãåããŸãã
3ã ã€ã³ã¹ããŒã« hy ãã PyPI ã ããã install hy.
4. REPL ãéå§ããŸãã hy.
5. REPL ã«æ¬¡ã®ããã«å ¥åããŸãã
=> (ããã!ããšåºå)
ããïŒ
=> (defn salutationsnm [åå] (print (+ "Hy " name "!")))
=> (æšæ¶æãããªãã®ååã)
ããã«ã¡ã¯ãããªãã®ååã§ãïŒ
ç
6. å®äºããããCTRL-D ãæŒããŸãã
ãããç¥æ§ïŒ ããã§ã çŽ æŽãããã§ãïŒ I 欲ããã§ã ããž æžããŸã a Hy ããã°ã©ã ã
7. ãšãªãŒã ããã°ã©ãã³ã° ãšãã£ã¿ãŒãéãã次ã®ããã«å ¥åããŸãã
(print "Python æ§æã§ã³ãŒãã£ã³ã°ããã€ããã§ããããHy ã«ãªããŸããã")
8.ååãä»ããŠä¿å ããã.hy.
9. ãããŠãæåã® Hy ããã°ã©ã ãå®è¡ããŸãã
ãããããã
10.
éåŒåžã«ãªããªãããã«æ·±åŒåžããŸãããã
11.
æªäººã®ããã«åŸ®ç¬ãã§é ã家ã«ãã£ããè¡ã£ãŠãèšèã§ã¯èšãè¡šããªããããªããšãããŠãã ããã
ãã¥ãŒããªã¢ã«
Hy ãã¥ãŒããªã¢ã«ãžãããã!
äžèšã§èšãã°ãHy 㯠Lisp ã®æ¹èšã§ããããã®æ§é ã Python ã«å€æãããã®ã§ãã
æåéããPython ã®æœè±¡æ§æããªãŒãžã®å€æã§ãã ïŒãã£ãšå€§éæã«èšããšã
ã€ãŸããHy 㯠Python ã§è足ãããªäººéãªã®ã§ã!)
ããã¯ãHy ãããã€ãã®ããšãæå³ããŠããã®ã§ãéåžžã«ã¯ãŒã«ã§ãã
· éåžžã«Pythonçã ãšæããLisp
· Lispers ã«ãšã£ãŠã¯ãLisp ã®ã¯ã¬ã€ãžãŒãªèœåã䜿çšããçŽ æŽãããæ¹æ³ã§ãããPython ã®åºãäžçã§ã䜿çšã§ããŸãã
ã©ã€ãã©ãª (ããã§ããLisp 㧠Django ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ãªããŸãã!)
· Pythonista ã«ãšã£ãŠãå¿«é©ãª Python ãã Lisp ã®æ¢çŽ¢ãå§ããçŽ æŽãããæ¹æ³ã§ãã
· 誰ã«ãšã£ãŠã: çŽ æµãªã¢ã€ãã¢ãããããè©°ãŸã£ã楜ããèšèªã§ãã
Basic intro ããž ãªã¹ã for ãã€ãœã³ãã¹ã¿
ããŠãããªãã¯ãããŸã§ Lisp ã䜿ã£ãããšã¯ãªããããããŸããããPython ã¯äœ¿ã£ãããšãããã§ãããã
Hy ã®ãhello worldãããã°ã©ã ã¯ãå®éã«ã¯éåžžã«åçŽã§ãã è©ŠããŠã¿ããïŒ
(ãHello Worldããå°å·)
èŠãïŒ ç°¡åïŒ ãæ³åã®ãšãããããã¯æ¬¡ã® Python ããŒãžã§ã³ãšåãã§ãã
ããããŒã¯ãŒã«ãããå°å·ãã
éåžžã«åçŽãªèšç®ãå ãããšã次ã®ããã«ãªããŸãã
(+1 3)
ãã㯠4 ãè¿ãã次ãšåçã«ãªããŸãã
1 + 3
ãªã¹ãã®æåã®é ç®ãåŒã³åºãããé¢æ°ã§ããã
æ®ãã®åŒæ°ã¯æž¡ãããåŒæ°ã§ããå®éãHy ã§ã¯ (ã»ãšãã©ã®å Žåãšåæ§)
Lisp) è€æ°ã®åŒæ°ã plus æŒç®åã«æž¡ãããšãã§ããŸãã
(+1 3 55)
ãã㯠59 ãè¿ããŸãã
ãããããLisp ã«ã€ããŠèããããšã¯ãã£ãŠããããã«ã€ããŠã¯ããŸãç¥ããªããããããŸããã Lispã¯ããªãã»ã©é£ãããããŸãã
Hy 㯠Python ããç¶æ¿ããŠãããããHy 㯠Lisp ã®åŠç¿ãå§ããã®ã«æé©ãªæ¹æ³ã§ãã
Lisp ã«é¢ããŠæãããªäž»ãªç¹ã¯ãæ¬åŒ§ããããããããšããããšã§ãã ããã¯ãããããã
æåã¯æžæãããã«æããŸãããããã»ã©é£ããããšã§ã¯ãããŸããã ç°¡åãªæ°åŠãèŠãŠã¿ãŸãããã
Hy ã€ã³ã¿ãŒããªã¿ã«å ¥åã§ããæ¬åŒ§ã®æã§å²ãŸããŠããŸãã
(setv çµæ (- (/ (+ 1 3 88) 2) 8))
ãã㯠38 ãè¿ããŸãããããããªãã§ãããã? ããŠãåçã®åŒã次ã®ããã«èŠãããšãã§ããŸãã
ãã€ãœã³:
çµæ = ((1 + 3 + 88) / 2) - 8
äžèšã Python ã§ã©ã®ããã«æ©èœããããç解ããããšãããšããã¡ãã次ã®ããã«ãªããŸãã
ããããã®å åŽã®æ¬åŒ§ã解ãããšã§çµæãå°ãåºããŸãã ããã¯åãåºæ¬çãªèãæ¹ã§ã
ããã ãŸã㯠Python ã§ãã®æŒç¿ãè©ŠããŠã¿ãŸãããã
çµæ = ((1 + 3 + 88) / 2) - 8
# ç°¡ç¥åãããš...
çµæ = (92 / 2) - 8
# ç°¡ç¥åãããš...
çµæ = 46 - 8
# ç°¡ç¥åãããš...
çµæ= 38
次ã«ãHy ã§åãããšãè©ŠããŠã¿ãŸãããã
(setv çµæ (- (/ (+ 1 3 88) 2) 8))
; ç°¡ç¥åãããš...
(setvçµæ(-(/92)2))
; ç°¡ç¥åãããš...
(setvçµæ(-46))
; ç°¡ç¥åãããš...
(setvçµæ38)
ãããããæ³åã®ãšããããã®æåŸã®è¡šçŸã¯ ã»ãã å€æ°ãä»£å ¥ããããšãæå³ããŸã
ãçµæãã¯38ãŸã§ã
èŠãïŒ ããŸã倧å€ã§ã¯ãããŸããïŒ
ãã㯠Lisp ã®åºæ¬åæã§ãã Lisp ã¯ããªã¹ãåŠçãã®ç¥ã§ãã ããã¯ã
ããã°ã©ã ã®æ§é ã¯å®éã«ã¯ãªã¹ãã®ãªã¹ãã§ãã (Pythonã«è©³ããæ¹ãªã
ãªã¹ãã®å Žåãäžèšãšåãæ§é ãæ³åããŠãã ããããã ãã代ããã«è§ãã£ãã䜿çšãããŠããŸãã
äžèšã®æ§é ãããã°ã©ã ãšããŒã¿æ§é ã®äž¡æ¹ãšããŠèŠãããšãã§ããŸã)ã
ããå€ãã®äŸã䜿çšãããšç解ããããã®ã§ãç°¡å㪠Python ããã°ã©ã ãäœæããŠãã¹ãããŠã¿ãŸãããã
次ã«ãåçã® Hy ããã°ã©ã ã衚瀺ããŸãã
def simple_conversation():
print ãããã«ã¡ã¯ïŒããªãã®ããšãç¥ãããã®ã§ãããããªãèªèº«ã«ã€ããŠæããŠãã ãããã
name = raw_input("ããªãã®ååã¯äœã§ãã?")
age = raw_input("ããªãã®å¹Žéœ¢ã¯äœæ³ã§ãã? ")
print "ããã«ã¡ã¯ " + åå + "! ããªã㯠" + 幎霢 + " æ³ã§ããã"
simple_conversation()
ãã®ããã°ã©ã ãå®è¡ãããšã次ã®ããã«ãªããŸãã
ããã«ã¡ã¯ïŒ ããªããšç¥ãåãã«ãªãããã§ãã èªå·±çŽ¹ä»ããé¡ãããŸãïŒ
ååã¯ãªãã§ããïŒ ã²ã€ãªãŒ
ããªãã¯äœæ³ã§ããïŒ 38
ããã«ã¡ã¯ãã²ã€ãªãŒïŒ 38æ³ã ããã§ããã
次ã«ãåçã® Hy ããã°ã©ã ãèŠãŠã¿ãŸãããã
(defn ç°¡åãªäŒè©± []
ïŒãããã«ã¡ã¯ïŒããªãã®ããšãç¥ãããã§ããããªãèªèº«ã«ã€ããŠæããŠãã ããïŒããå°å·ïŒ
(setv name (çå ¥åãããªãã®ååã¯äœã§ãã?ã))
(setv age (çå ¥åãããªãã®å¹Žéœ¢ã¯äœã§ãã?ã))
(print (+ "ããã«ã¡ã¯ " name "! ããªã㯠"
幎霢 " æ³ã")))
(ç°¡åãªäŒè©±)
äžèšã®ããã°ã©ã ãèŠããšãããããã®æåã®èŠçŽ ã
ããã°ã©ã ã®ãªã¹ãã¯åŒã³åºãããé¢æ° (ãŸãã¯ãã¯ã...åŸã§èª¬æããŸã) ã§ãã
æ®ããåŒæ°ã§ãããšèããã°ããããäœãæå³ããã®ããç解ããã®ã¯éåžžã«ç°¡åã§ãã
(ããªãããããããæ³åã®ãšããã å®çŸ© ã¡ãœãããå®çŸ©ãã Hy ã¡ãœããã§ã)ã
ããã§ãããã£ããå€ããããããæåã¯æ··ä¹±ãã人ãå€ãã§ãã
ãããããããç°¡åã«ããããã«åœ¹ç«ã€ãã®ããããããããŸããã€ã³ãã³ããé©åã«ä¿ã€ããšãšã
æ¬åŒ§ãäžèŽãããŠãšãã£ã¿ã䜿çšããŸã (ããã¯ããããããäœãæå³ããããç解ããã®ã«åœ¹ç«ã¡ãŸã)
æ¬åŒ§ã¯) ãšçµã¿åããããšãå¿«é©ã«æããããããã«ãªããŸãã
å®éã«ã¯éåžžã«åçŽãªããŒã¿ã§ããã³ãŒãæ§é ãæã€ããšã«ã¯ããã€ãã®å©ç¹ããããŸã
Lisp ã®ã³ã¢ãšãªãæ§é ãåºã¥ããŠããŸãã ãŸããããã¯ããªãã®ããã°ã©ã ã
解æãç°¡åã§ãããã°ã©ã ã®å®éã®æ§é å šäœãéåžžã«æ確ã«é²åºãããŸãã
ããªããžã (hy ã«ã¯ã衚瀺ãããŠããæ§é ã Python ã®æ§é ã«å€æãããè¿œå ã®ã¹ãããããããŸãã
ç¬èªã®è¡šçŸ ... Common Lisp ã Emacs Lisp ãªã©ã®ãããçŽç²ãªãLisp ã§ã¯ãããŒã¿
ã³ãŒãå ã«è¡šç€ºãããæ§é ãšãå®è¡ãããããŒã¿æ§é ã¯ããã«è€éã§ãã
æåéãè¿ãã§ããïŒ
ããã®ãã XNUMX ã€ã®æå³ã¯ãã¯ãã§ããããã°ã©ã ã®æ§é ãåçŽãªããŒã¿ã®å Žå
ã€ãŸããéåžžã«ç°¡åã«ã³ãŒããèšè¿°ã§ããã³ãŒããäœæã§ãããšããããšã§ãã
ãŸã£ããæ°ããèšèªæ©èœãéåžžã«è¿ éã«å®è£ ã§ããŸãã Hy ã®åã¯ããã§ã¯ãããŸããã§ãã
Python ããã°ã©ããŒã«ãšã£ãŠã¯éåžžã«å¯èœã§ã...ããã§ããªãããã¯ãã®é©ç°çãªæ©èœãå©çšã§ããããã«ãªããŸã
åãå ¥ããŠãã ããïŒè¶³å ã«åããªãããã«æ³šæããŠãã ããïŒïŒ
Hy is a Lispé¢šå³ Python
Hy 㯠Python ç¬èªã®æœè±¡æ§æããªãŒã«å€æãããããããã«ãã¹ãŠã®ããšãåããã§ãããã
ããªãã¿ã® Python ã®ãã¯ãŒãããã«å©çšã§ããŸãã
Hy ã® Python ã®ããŒã¿åãšæšæºã©ã€ãã©ãªã«å®å šã«ã¢ã¯ã»ã¹ã§ããŸãã å®éšããŠã¿ãŸããã
hy ã€ã³ã¿ããªã¿ã§ã¯æ¬¡ã®ããã«ãªããŸãã
=> [1 2 3]
[1ã2ã3]
=> {ãç¬ããå ããã
...ãç«ãããã£ãŒã}
...
{'ç¬': '鳎ã声', 'ç«': 'ãã£ãŒ'}
=> (, 1 2 3)
ïŒ1ã2ã3ïŒ
ä»ã® Lisp ã«ç²ŸéããŠããå Žåã¯ãHy ã Common Lisp ããµããŒãããŠããããšã«èå³ããããããããŸããã
Lisp ã«ããåŒçšæ¹æ³:
=> '(1 2 3)
(1L 2L 3L)
ãã¹ãŠã®çµã¿èŸŒã¿åã®äŸ¿å©ãªã¡ãœããã«ãã¢ã¯ã»ã¹ã§ããŸãã
=> (.strip " fooooo ")
ããµãããã
ããã¯äœã§ããïŒ ã¯ãã確ãã«ãããã¯æ¬¡ãšãŸã£ããåãã§ãã
" ãµããã ".strip()
ããããããèšæ³ã䜿ã£ãLispãªã®ã§ãïŒ ãã®æååãå€æ°ãšããŠå²ãåœãŠãå Žåã
次ã®ããšãã§ããŸãã
(setv this-string " fooooo ")
(ãã®æåå.ã¹ããªãã)
æ¡ä»¶æã«ã€ããŠã¯ã©ãã§ãã?:
(if (äœããè©ŠããŠã¿ã)
(ãããã true ã®å Žåããåºå)
(ãããã false ã®å Žåããåºå))
äžã§ãããããã«ãæåã®åŒæ°ã¯ if ã¯çå®ãã¹ããXNUMX çªç®ã®åŒæ°ã¯
true ã®å Žåã¯æ¬æãfalse ã®å Žå㯠XNUMX çªç®ã®åŒæ° (ãªãã·ã§ã³!) ã§ãã ã»ãã«).
ããè€éãªæ¡ä»¶ãå®è¡ããå¿ èŠãããå Žåã¯ã次ã®ãã®ããªãããšãããããŸãã elif
ãã€ã§å©çšå¯èœã§ãã 代ããã«ããšåŒã°ãããã®ã䜿çšããå¿ èŠããããŸãã æ¡ä»¶ã Python ã§ã¯ã次ã®ããã«ããããšãã§ããŸã
äœãã®ãããªãã®ïŒ
ãµã ã㌠= 33
somevar > 50ã®å Žå:
print "ãã®å€æ°ã¯å€§ããããŸã!"
elif somevar < 10:
print "ãã®å€æ°ã¯å°ããããŸã!"
ãã®ä»ïŒ
print "ãã®å€æ°ã¯ãŸãã«æ£ããã§ã!"
Hy ã§ã¯ã次ã®ããã«ããŸãã
(æ¡ä»¶
[(> somevar 50)
(print "ãã®å€æ°ã¯å€§ããããŸã!")]
[(< somevar 10)
(print "ãã®å€æ°ã¯å°ããããŸã!")]
[çå®
(print "ãã®å€æ°ã¯ãŸãã«æ£ãã!")])
ããªããæ°ã¥ãããšã¯ã æ¡ä»¶ å®è¡ãããã¹ããŒãã¡ã³ããšã¹ããŒãã¡ã³ãã®éã§ã¹ã€ããããªãã«ããŸãã
çãåœããæ¡ä»¶ä»ãã§ãã§ãã¯ããçµæãå€ãã£ãå Žåã«å®è¡ããå°ãã®ã³ãŒã
ããã¯çå®ã§ãã ãŸãã ã»ãã« æåŸã«åã«æ¬¡ã®ããã«å®è£ ãããŸã
ã®ãã§ã㯠true -- ããã¯ãªãã§ãã true ã¯åžžã« true ã«ãªãã®ã§ããããŸã§å°éãããã
åžžã«ãããå®è¡ããŠãã ããïŒ
次ã®ãããªã³ãŒããããå Žåãäžèšã®ããšã«æ°ã¥ããããããŸããã
(äœããã®æ¡ä»¶ãããå Žå
(trueã®å Žåã®æ¬äœ)
(åœã®å Žåã®æ¬äœ))
ã¡ãã£ãšåŸ ã£ãŠïŒ 次ã®ããããã®æ¬æã§è€æ°ã®ã¹ããŒãã¡ã³ããå®è¡ãããå Žåã¯ã©ãããã°ããã§ãã?
ãããã¯ïŒ
次ã®ããšãã§ããŸãã
(if (äœããè©ŠããŠã¿ã)
ïŒãã
(ãããã true ã®å Žåããåºå)
(print "ãããŠãªãããã§ã¯ãªãã®ãããããããã«çå®ã§ãããã«ã€ããŠè©±ãç¶ããŸããã!))
(ãããã¯ãŸã åã«åœã§ãããšè¡šç€ºããŸã))
䜿çšããããšãããããŸã do è€æ°ã®ã¹ããŒãã¡ã³ããã©ããããŸãã ä»ã«è©³ãããªã
Lispãããã¯æ¬¡ã®ãã®ãšåçã§ã çªèµ· ä»ã®å Žæã
ã³ã¡ã³ãã¯ã»ãã³ãã³ã§å§ãŸããŸãã
(ãããã¯å®è¡ãããŸãããšå°å·)
; (ãããããããã¯ããã§ã¯ãããŸããããšå°å·)
(+ 1 2 3) ; è¿œå ã¯å®è¡ããŸããããã®ã³ã¡ã³ãã¯å®è¡ããŸããã
ã«ãŒãåŠçã¯é£ããããšã§ã¯ãããŸããããããçš®ã®ç¹å¥ãªæ§é ãæã£ãŠããŸãã Python ã§ã¯ã次ã®ããã«ããŸãã
ç§ã®ããã« ç¯å²ïŒ10ïŒïŒ
print "'i' ã¯çŸåš " + str(i) ã«ãããŸã
Hy ã§ã¯æ¬¡ã®ããã«ãªããŸãã
([i (ç¯å² 10)] ã®å Žå
(print (+ "'i' ã¯çŸåš " (str i)) ã«ãããŸã))
ããŸããŸãª Python ã©ã€ãã©ãªãã€ã³ããŒãããŠäœ¿çšããããšãã§ããŸãã äŸãã°ïŒ
(OSãã€ã³ããŒã)
(if (os.path.isdir "/tmp/somedir")
(os.mkdir "/tmp/somedir/anotherdir")
(ãããããã®éã¯ãªãã!ããšå°å·))
Python ã®ã³ã³ããã¹ã ãããŒãžã£ãŒ (ã ã¹ããŒãã¡ã³ã) ã¯æ¬¡ã®ããã«äœ¿çšãããŸãã
([[f ("/tmp/data.in" ãéã)]] ã䜿çš
(print (.read f)))
ããã¯æ¬¡ãšåçã§ãïŒ
open("/tmp/data.in") ã f ãšããŠäœ¿çš:
print f.read()
ãããŠã¯ãããªã¹ãå å è¡šèšããããŸãã Python ã§ã¯æ¬¡ã®ããã«ããããšãã§ããŸãã
ãªããºäºä¹ = [
pow(num, 2)
çªå·å ¥åçš ç¯å²(100)
if num % 2 == 1]
Hy ã§ã¯ã次ã®ããã«å®è¡ã§ããŸãã
(setv ãªããºäºä¹
(ãªã¹ã-ã³ã³ã
(ãã¯ãŒçªå· 2)
(æ°å€(ç¯å²100))
(= (% num 2) 1)))
; ãããŠãäŸã¯ Clojure ããŒãžããæ¥ç¥ããã«ãçãŸããŸãã:
; ãã§ã¹ç€ã®ãã¹ãŠã®ãããã¯ããªã¹ãããŠã¿ãŸãããã
(ãªã¹ã-ã³ã³ã
(ãxy)
(x (ç¯å² 8)
y "ABCDEFGH"))
; [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'), (0, 'F'), ( 0, 'G')ã(0, 'H')ã
; (1, 'A')ã(1, 'B')ã(1, 'C')ã(1, 'D')ã(1, 'E')ã(1, 'F')ã(1 ã'G')ã(1ã'H')ã
; (2, 'A')ã(2, 'B')ã(2, 'C')ã(2, 'D')ã(2, 'E')ã(2, 'F')ã(2 ã'G')ã(2ã'H')ã
; (3, 'A')ã(3, 'B')ã(3, 'C')ã(3, 'D')ã(3, 'E')ã(3, 'F')ã(3 ã'G')ã(3ã'H')ã
; (4, 'A')ã(4, 'B')ã(4, 'C')ã(4, 'D')ã(4, 'E')ã(4, 'F')ã(4 ã'G')ã(4ã'H')ã
; (5, 'A')ã(5, 'B')ã(5, 'C')ã(5, 'D')ã(5, 'E')ã(5, 'F')ã(5 ã'G')ã(5ã'H')ã
; (6, 'A')ã(6, 'B')ã(6, 'C')ã(6, 'D')ã(6, 'E')ã(6, 'F')ã(6 ã'G')ã(6ã'H')ã
; (7, 'A')ã(7, 'B')ã(7, 'C')ã(7, 'D')ã(7, 'E')ã(7, 'F')ã(7 ã'G')ã(7ã'H')]
Python ã¯ãããŸããŸãªæŽŸæãªåŒæ°ãšããŒã¯ãŒãåŒæ°ããµããŒãããŠããŸãã Python ã§ã¯æ¬¡ã®ããã«ãªããŸãã
èŠãïŒ
>>> defOptional_arg(pos1, pos2, ããŒã¯ãŒã 1=ãªã, ããŒã¯ãŒã 2=42):
... return [pos1, pos2, ããŒã¯ãŒã1, ããŒã¯ãŒã2]
...
>>> ãªãã·ã§ã³åŒæ°(1, 2)
[1ã2ããªãã42]
>>> ãªãã·ã§ã³åŒæ°(1, 2, 3, 4)
[1ã2ã3ã4]
>>> ãªãã·ã§ã³åŒæ°(ããŒã¯ãŒã 1=1ãäœçœ® 2=2ãäœçœ® 1=3ãããŒã¯ãŒã 2=4)
[3ã2ã1ã4]
Hyã§ãåãããš:
=> (defn ãªãã·ã§ã³åŒæ° [pos1 pos2 &ãªãã·ã§ã³ã®ããŒã¯ãŒã 1 [ããŒã¯ãŒã 2 42]]
... [pos1 pos2 ããŒã¯ãŒã1 ããŒã¯ãŒã2])
=> (ãªãã·ã§ã³ã®åŒæ° 1 2)
[1 2 ãªã 42]
=> (ãªãã·ã§ã³ã®åŒæ° 1 2 3 4)
[1 2 3 4]
Hy ã® 0.10.1 以éã®ããŒãžã§ã³ (äŸ: git master) ãå®è¡ããŠããå Žåã¯ãæ°ãã䟿å©ãªæ©èœããããŸãã
ããŒã¯ãŒãåŒæ°ã®æ§æ:
=> (ãªãã·ã§ã³ã®åŒæ°:ããŒã¯ãŒã1 1
... :pos2 2
... :pos1 3
... :ããŒã¯ãŒã2 4)
[3ã2ã1ã4]
ãã以å€ã®å Žåã¯ããã€ã§ã䜿çšã§ããŸã é©çšããã ããããäœã§ãã é©çšãã?
ééããããšã«æ £ããŠããŸãã * args & ** kwargs Python ã§?:
>>> åŒæ° = [1 2]
>>> kwargs = {"ããŒã¯ãŒã2": 3
... "ããŒã¯ãŒã1": 4}
>>>Optional_arg(*args, **kwargs)
ãããåçŸã§ããã®ã¯ã é©çšãã:
=> (setv args [1 2])
=> (setv kwargs {"ããŒã¯ãŒã2" 3
... "ããŒã¯ãŒã 1" 4})
=> (optional-arg args kwargs ãé©çš)
[1ã2ã4ã3]
次ã®ãããªèŸæžã¹ã¿ã€ã«ã®ããŒã¯ãŒãåŒæ°ã®æ§é ããããŸãã
(defn å¥ã®ã¹ã¿ã€ã« [&key {"key1" "val1" "key2" "val2"}]
[ããŒ1 ããŒ2])
ããã§ã®éãã¯ãããã¯èŸæžã§ãããããç¹å®ã®çšèªã«äŸåã§ããªãããšã§ãã
åŒæ°ã®é åºä»ãã
HyããµããŒãããŸã * args & ** kwargsã Pythonã®å ŽåïŒ
def some_func(foo, bar, *args, **kwargs):
å°å·ç©ãã€ã³ããŒããã
pprint.pprint((foo, bar, args, kwargs))
Hy ã«çžåœãããã®:
(defn some-func [foo bar &rest args &kwargs kwargs]
(å°å·ç©ãã€ã³ããŒã)
(pprint.pprint (, foo bar args kwargs)))
æåŸã«ããã¡ããææ¥ãå¿ èŠã§ãã Python ã§ã¯ã次ã®ãããªã¯ã©ã¹ãèããããŸãã
ã¯ã©ã¹FooBar(ãªããžã§ã¯ã):
ãã "
ããã«å¥ã®ã¯ã©ã¹ã®äŸ
ãã "
def __init__(self, x):
self.x = x
def get_x(self):
ãã "
x ã®ã³ããŒãè¿ããŸã
ãã "
self.x ãè¿ã
ãã€ã§ã¯ïŒ
(defclass FooBar [ãªããžã§ã¯ã]
ãããã«å¥ã®ã¯ã©ã¹äŸã
[[ - åæå -
(fn [èªåèªèº« x]
(setv self.xx)
; __init__ ã«ã¯ None ãå¿ èŠãªãããçŸåš --init-- ã«å¿ èŠã§ã
; ããããªããªãããšãé¡ã£ãŠããŸã:)
ãªãïŒ]
[ååŸ-x
(fn [èªåèªèº«]
ãx ã®ã³ããŒãè¿ããŠãã ããã
self.x)]])
ã¯ã©ã¹ã¬ãã«ã®å±æ§ãå®è¡ããããšãã§ããŸãã Python ã®å Žå:
ã¯ã©ã¹é¡§å®¢(models.Model):
åå = ã¢ãã«.CharField(max_length=255)
ã¢ãã¬ã¹ = ã¢ãã«.TextField()
ã¡ã¢ = models.TextField()
ãã€ã§ã¯ïŒ
(defclass Customer [models.Model]
[[åå (models.CharField :æå€§é· 255})]
[ã¢ãã¬ã¹(models.TextField)]
[ã¡ã¢ (models.TextField)]])
Hy <-> Python çžäºéçš
Hy ãã€ã³ããŒããããšãPython ããçŽæ¥ Hy ã䜿çšã§ããããã«ãªããŸãã
以äžãä¿åãããš ãæšæ¶.hy:
(defngreet [åå] (print "hello from hy," name))
ãã®åŸãã¢ãžã¥ãŒã«ãã€ã³ããŒãããåã« hy ãã€ã³ããŒãããããšã§ãPython ããçŽæ¥äœ¿çšã§ããŸãã ã®
PythonïŒ
ã€ã³ããŒããã€
æšæ¶æãã€ã³ããŒããã
æšæ¶.greet("ããŒ")
Python ã§é¢æ° (ãŸãã¯ã¯ã©ã¹!) ã宣èšããããã Hy! ã§äœ¿çšããããšãã§ããŸãã
以äžãä¿åãããš æšæ¶.py Pythonã®å ŽåïŒ
ããã©ã«ãã®æšæ¶(åå):
print("ããã«ã¡ã¯ã%s" % (åå))
Hy ã§äœ¿çšã§ããŸãã
(æšæ¶ãã€ã³ããŒã)
(.æšæ¶ããµãŒã)
ããŒã¯ãŒãåŒæ°ã䜿çšããã«ã¯ã次ã®ããã«äœ¿çšã§ããŸãã æšæ¶.py:
def æšæ¶(ååãã¿ã€ãã« = "å ç"):
print("ããã«ã¡ã¯ã%s %s" % (ã¿ã€ãã«,åå))
(æšæ¶ãã€ã³ããŒã)
(ãããŒããšæšæ¶)
(.æšæ¶ãããŒããããŒã¹ã)
(é©çš (. æšæ¶ æšæ¶) ["Foo"] {"title" "Lord"})
ã©ã¡ããåºåãããŸããïŒ
ããã«ã¡ã¯ãããŒå¿
ããã«ã¡ã¯ãããŒã¹ã»ããŒ
ããã«ã¡ã¯ãããŒæ§
ãã³ãïŒ
Hy ã«ã¯ããã¹ã¬ãã ãã¯ãããšããŠç¥ãããæ©èœããããŸããããã¯ãHy ã®éåžžã«åªããæ©èœã§ãã
ã¯ããŒãžã¥ã¢ããã ãã¹ã¬ãããã¯ããïŒæ¬¡ã®ããã«èšè¿°ãããŸãïŒ ->) ã¯ãæ·±ããã¹ããé¿ããããã«äœ¿çšãããŸãã
åŒã
ã¹ã¬ãã ãã¯ãã¯ãååŒã次ã®åŒã®æåã®åŒæ°ã«æ¿å ¥ããŸãã
å Žæã
å€å žçãªãã®ãåãäžããŠã¿ãŸãããã
(ã«ãŒã (print (eval (read))))
ãã®ããã«æžãã®ã§ã¯ãªãã次ã®ããã«æžãããšãã§ããŸãã
(-> (èªã¿åã) (è©äŸ¡) (å°å·) (ã«ãŒã))
ä»ãã䜿çšã㊠Python-shãã¹ã¬ãããã¯ããã©ã®ããã«å®è¡ããããã瀺ãããšãã§ããŸãïŒpython-shã®ã»ããã¢ããã®ããïŒ
ãã€ãã®ããã«äœ¿çšã§ããŸãã
=> (ã€ã³ããŒã [sh [cat grep wc]])
=> (-> (cat "/usr/share/dict/words") (grep "-E" "^hy") (wc "-l"))
210
ãã¡ãããããã¯æ¬¡ã®ããã«æ¡åŒµãããŸãã
(wc (grep (cat "/usr/share/dict/words") "-E" "^hy") "-l")
ã¯ããã«èªã¿ããããªããŸããã? ã¹ã¬ãããã¯ãã䜿ã£ãŠã¿ããïŒ
HY ã¹ã¿ã€ã« ã¬ã€ã
ããåç¥ã®ããã«ã倧è£ãç§ã¯å€ãã®ç¹ã§ãã³ãã«ãã¢ã®èãã«åæããŸããâŠãããã圌ãããã§ããããšãåŠå®ããããšã¯ã§ããŸããã
ã¹ã¿ã€ã«ãããâŠã â ãã£ãã¢ã¹ã»ãã€ãžã§ã©ã¹ã»ãã©ãã¯ã ããªãŒ ããã¿ãŒ & ã 泚æ of ã ãã§ããã¯ã¹
Hy ã¹ã¿ã€ã« ã¬ã€ãã¯ãHyve (ãããHy ã³ãã¥ããã£) ã®äžé£ã®åºæ¬ã«ãŒã«ãšãªãããšãç®çãšããŠããŸãã
ãã¹ãŠã« Hy ãè¿œå ããŠæ £çšç㪠Hy ã³ãŒããèšè¿°ããããšã«èªããæã£ãŠããŸãã Hy ã¯å€ãã®ããšããããããŸã
Clojure ãš Common Lisp ããã®ç§»è¡ãå®çŸããªãããPython ã®çžäºéçšæ§ãåžžã«ç¶æããŸãã
åå¥æ²
ã é of Hy
é²éã¯äœè·ã«ãäœã®ãçµã説ããŠããã®ã§ããïŒããšå°ããŸããã
ãæ¶ æ§çµãã
ãæ¶ æ§çµã«ã¯å埳ããããŸããã
ãããã¯ãããŸããã
ãŠã³ã¢ã³ã¯ã«ãããæã«åããªããå°ããããããã«ã¯ããã€ã®åŸ³ãããã®ïŒã
ãäœããããŸããããšå§äŸ¶ã¯èšããŸããã
ãã§ãå€ä»£ã®äººãã¡ã¯ããã ã£ãã£ãŠèšã£ãŠãããïŒã ãŠã³ã¢ã³ã¯èšã£ãã
ã圌ããèšã£ãããšã«ã€ããŠã©ãæããŸããïŒã
ãŠã³ã¢ã³ã¯ã«ããããããããåãããŸãããïŒããšå°ããã
ããããããšå§äŸ¶ã¯èšããŸããã
ãããã§ã¯ããçµã®è¬çŸ©ãç¶ããã»ããããã§ãããããšãŠã³ã¢ã³ã¯èšããŸããã
â (å ¬æ¡) ãã¯ã
以äžã«ãäœæã«ãããè¡ãããèšèšäžã®æ±ºå®äºé ã®ç°¡åãªãªã¹ãã瀺ããŸãã
HYã
· Lisp ã®ããã«èŠããŸãã DTRT ã䜿çšãããš (äŸ: ããã·ã¥ãã¢ã³ããŒã¹ã³ã¢ã«å€ãããã€ã€ãŒããã
ãã¹ãŠå€§æåïŒã
· ç§ãã¡ã¯ãŸã Python ã§ãã ã»ãšãã©ã®å éšã¯ 1:1 㧠Python å éšã«å€æãããŸãã
· ããããå Žæ㧠Unicode ã䜿çšããŸãã
· å¯èœãªå Žåã¯ãPython 2 ã®èª€ã£ã決å®ãä¿®æ£ããŸã (ã true_division).
· çåãããå Žåã¯ãPython ã䜿çšããŠãã ããã
· ããã§ãäžæãªå Žåã¯ãClojure ãåç §ããŠãã ããã
· ããã«ç¢ºä¿¡ãæãŠãªãå Žåã¯ãCommon Lisp ãåç §ããŠãã ããã
· ç§ãã¡ã¯ Clojure ã§ã¯ãªãããšã«çæããŠãã ããã ç§ãã¡ã¯Common Lispã§ã¯ãããŸããã ç§ãã¡ã¯ãã¢ã€ã³ãã㯠Python ã§ãã
æå³ã®ããäœåãªãããã
ã¬ã€ã¢ãŠã & ã€ã³ãã³ã
· æ«å°Ÿã®ã¹ããŒã¹ã¯é¿ããŠãã ããã ææªã ïŒ
· ã€ã³ãã³ã㯠2 ã¹ããŒã¹ïŒããŒãã¿ããªãïŒãšããããã ããã€ã³ãã³ããäžèŽããå Žåãé€ãã
åã®è¡ã
;; è¯ãïŒãããŠå¥œãŸããïŒ
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))
;; ãŸã 倧äžå€«
(defn fib [n]
(if (<= n 2) n (+ (fib (- n 1)) (fib (- n 2))))
;; ãŸã 倧äžå€«
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))
;; ãã¹ããªãã¯ã«ã°ãã°ããã
(defn fib [n]
(if (<= n 2)
ã;; ã¯ããã¹ããŒã¹ããŒãã©ã³ãã ã«æŒãã®ã倧奜ãã§ã
(+ (fib (- n 1)) (fib (- n 2))))
· æ¬åŒ§ã¯å¿ é ã§ã 決ã㊠äžäººã§åãæ®ãããæ²ãããŠå€ç¬ã§ãã
;; è¯ãïŒãããŠå¥œãŸããïŒ
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))
;; ãã¹ããªãã¯ã«ã°ãã°ããã
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2)))
)
) ; ãããç«ã§çãããŠããŸã
ã»çžŠã«æãã ã ãããã¯ã
(let [[foo (bar)]
[qux(ããº)]]
(ããŒã¯ãã¯ã¹))
· ã€ã³ã©ã€ã³ ã³ã¡ã³ãã¯ã³ãŒãã®æ«å°Ÿãã XNUMX ã€ã®ã¹ããŒã¹ã§ãªããã°ãªããŸããã 圌ãã¯åžžã«
ã³ã¡ã³ãæåãšã³ã¡ã³ãã®å é ã®éã®ã¹ããŒã¹ã ãŸããããããªãããã«ããŠãã ããã
æãããªããšãã³ã¡ã³ãããŸãã
;; è¯ã
(setv ind (dec x)) ; ã€ã³ããã¯ã¹ã¯ 0 ããå§ãŸããŸã
;; ã¹ã¿ã€ã«ã«æºæ ããŠããããæçœãªããšã ããè¿°ã¹ãŠãã
(setv ind (dec x)) ; ã€ã³ããã¯ã¹ã x-1 ã«èšå®ããŸã
;; æªã
(setv ind (dec x));楜ãã¿ã®ããã«åèªãå ¥åãã
ã³ãŒãã£ã³ã° 圢åŒ
· æ £äŸãšããŠã䜿çšããªãããã«ããŠãã ããã def ã°ããŒãã«å€æ°ä»¥å€ã®å Žåã äœ¿çš ã»ãã
é¢æ°ãã«ãŒããªã©ã®å éšã
;; è¯ãïŒãããŠå¥œãŸããïŒ
(ããã©ã«ã *å¶é* 400000)
(å®çŸ© fibs [ab]
(æ¬åœã§ãã
(åéa)
(setv (, ab) (, b (+ ab))))
;; æªãïŒãããŠå¥œãŸãããªãïŒ
(å®çŸ© fibs [ab]
(æ¬åœã§ãã
(åéa)
(def (, ab) (, b (+ ab))))
· ãã¯ãã«æ§æãæå³ãããŠããå Žæã§ã¯ãs åŒæ§æã䜿çšããªãã§ãã ããã ããšãã°ãäºå®
ããã XNUMX ã€ã®äŸã®ãã¡åè ãæ©èœããã®ã¯ãã³ã³ãã€ã©ãé床ã«æ©èœããŠããªãã ãã§ãã
å³ããã å®éã«ã¯ããã®ãããªå Žæã§ã®æ£ããæ§æã¯åŸè ã§ãã
;; æªãïŒãããŠéªæªïŒ
(defn foo (x) (print x))
(foo1)
;; è¯ãïŒãããŠå¥œãŸããïŒ
(defn foo [x] (print x))
(foo1)
· æ·±ããã¹ãããããã¯ããçºçããå Žåã¯ãã¹ã¬ãã ãã¯ããŸãã¯ã¹ã¬ãã ããŒã« ãã¯ãã䜿çšããŸãã
S åŒã ãã ãã䜿çšãããšãã¯æ éã«ããŠãã ããã æ確ãªå Žåã«ã¯ãããã䜿çšããŠãã ããã
å¯èªæ§ãåäžããŸãã è€éã§ç解ãã«ããåŒãäœæããªãã§ãã ããã
;; 奜ãŸãã
(def *åå*
([f (ãnames.txtããéã)] ä»ã)
(-> (.read f) (.strip) (.replace "\"" "") (.split ",") (sorted)))
;; ããŸããããªã
(def *åå*
([f (ãnames.txtããéã)] ä»ã)
(ãœãŒãæžã¿ (.split "," (.replace "\"" "" (.strip (.read f))))))
;; ããããè¯ãã¢ã€ãã¢ã§ã¯ãªãã§ããã
(å®çŸ©å¹³æ¹? [x]
(->> 2 (pow (int (sqrt x))) (= x)))
· Clojure ã¹ã¿ã€ã«ã®ãããè¡šèšæ³ã¯ããªããžã§ã¯ãã®ã¡ãœãããçŽæ¥åŒã³åºããããåªå ãããŸãã
ãã ããã©ã¡ããåŒãç¶ããµããŒããããŸãã
;; è¯ã
([fd (éã "/etc/passwd"ïŒ]
(print (.readlines fd)))
;; ããŸããããªã
([fd (éã "/etc/passwd"ïŒ]
(print (fd.readlines)))
ãŸãšã
ããã¡ãã·ã§ã³ã¯æ¶ããŸãããã¹ã¿ã€ã«ã¯æ°žé ã§ãã - ã€ãŽã»ãµã³ããŒã©ã³
ãã®ã¬ã€ãã¯åãªãã³ãã¥ãã㣠ã¬ã€ãã©ã€ã³ã®ã»ããã§ãããæããã«ã³ãã¥ãã㣠ã¬ã€ãã©ã€ã³ã¯æ¬¡ã®ããšãè¡ããŸãã
掻çºãªã³ãã¥ããã£ããªããã°æå³ããããŸããã è²¢ç®ã¯å€§æè¿ã§ãã #hy in ã§åå ããŸããã
freenode ã«ã€ããŠããã°ãæžãããããã€ãŒããããããããŠæãéèŠãªããšãšããŠãHy ã楜ããã§ãã ããã
æè¬
· ãã®ã¬ã€ãã¯ã以äžããå€å€§ãªåœ±é¿ãåããŠããŸãã @ããŒã«ã¿ã° ããã®ããã°æçš¿ Hy çå ã¬ã€ã
ã» Clojureã® åœ¢åŒ ã¬ã€ã
ããã¥ã¢ã« INDEX
å 容ïŒ
Command LINE ã€ã³ã¿ãã§ãŒã¹
hy
Command LINE ãªãã·ã§ã³
-c
Hy ã³ãŒããå®è¡ããŸãã command.
$ hy -c "(print (+ 2 2))"
4
-i
Hy ã³ãŒããå®è¡ããŸãã commandããã®åŸã¯REPLã«çãŸããŸãã
-m
Hy ã³ãŒããå®è¡ããŸãã ã¢ãžã¥ãŒã«å«ã¿ãŸã å®çŸ©ãã å®çŸ©ãããŠããå Žåã
ã -m ãã©ã°ã¯ãªãã·ã§ã³ ãªã¹ããçµäºãããã®åŸã®ãã¹ãŠã®åŒæ°ãçµäºããŸãã ã¢ãžã¥ãŒã« å
ã®ã¢ãžã¥ãŒã«ã«æž¡ãããŸã sys.argv.
ããŒãžã§ã³ 0.10.2 ã®æ°æ©èœã
- ã¹ã〠å®è¡åã«åçã® Python ã³ãŒããåºåããŸãã äŸãã°ïŒ
=> (defn salutationsnm [åå] (print (+ "Hy " name "!")))
def salutationsnm(åå):
return print(((u'Hy ' + åå) + u'!'))
=> (æšæ¶æãããªãã®ååã)
salutationsnm(u'ããªãã®åå')
ããã«ã¡ã¯ãããªãã®ååã§ãïŒ
=>
ããŒãžã§ã³ 0.9.11 ã®æ°æ©èœã
--show-ãã¬ãŒã¹ããã¯
Hy äŸå€ã®æ¡åŒµãã¬ãŒã¹ããã¯ãåºåããŸãã
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
-v Hy ã®ããŒãžã§ã³çªå·ãåºåããŠçµäºããŸãã
ãã
Command LINE ãªãã·ã§ã³
ãã¡ã€ã«[ã ãã¡ã€ã«N]
Hy ã³ãŒãã Python ãã€ãã³ãŒãã«ã³ã³ãã€ã«ããŸãã ããšãã°ã次ã®ã³ãŒãã次ã®ããã«ä¿åããŸãã
ãã€ããŒã .hy:
(defn hy-hy [åå]
(print (+ "åå"!")))
(ãã€ãã€ãã¢ãããã³ã)
次ã«ã
$ hyc hyname.hy
$ python hyname.pyc
ããã¢ãããã³ïŒ
hy2py
ããŒãžã§ã³ 0.10.1 ã®æ°æ©èœã
Command LINE ãªãã·ã§ã³
-s
--ãœãŒã¹ä»ã
解æããããœãŒã¹æ§é ã衚瀺ããŸãã
-a
--ast ä»ã
çæãããASTã衚瀺ããŸãã
-np
--Python ãªã
AST ããçæããã Python ã³ãŒãã¯è¡šç€ºããŸããã
Hy ïŒ èšèªïŒ
èŠåïŒ
ããã¯äžå®å šã§ãã ææžåäœæ¥ãžã®è²¢ç®ãæ€èšããŠãã ããã
çè« of Hy
Hy ã¯ãäœããã Python ãšã®åæ¹å㧠100% ã®äºææ§ãç¶æããŸãã
èªäœã ãã¹ãŠã® Hy ã³ãŒãã¯ãããã€ãã®ç°¡åãªã«ãŒã«ã«åŸããŸãã ããã¯å ¥ã£ãŠããã®ã§èŠããŠãããŠãã ãã
ãã³ãã£ã
ãããã®ã«ãŒã«ã¯ãHy ã³ãŒããæ £çšçã§ãããäž¡æ¹ã®èšèªã§ã€ã³ã¿ãŒãã§ã€ã¹å¯èœã§ããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã
· ã€ã€ãŒããå ã®èšå·ã¯ããã®æååã®å€§æåããŒãžã§ã³ã«å€æãããŸãã ããã«
äŸã foo ã«ãªããŸã FOO.
· UTF-8 ãšã³ãã£ãã£ã¯æ¬¡ã䜿çšããŠãšã³ã³ãŒããããŸãã Punycode ãããŠæ¥é èŸã ããã äŸãã°ã â
ã«ãªããŸã hy_w7h, ⥠ã«ãªããŸã hy_g6h, iâ¥u ã«ãªããŸã hy_iu_t0x.
· ããã·ã¥ãå«ãèšå·ã¯ã¢ã³ããŒã¹ã³ã¢ã«çœ®ãæããããŸãã äŸãã°ã
ã¬ã³ããªã³ã°ãã³ãã¬ãŒã ã«ãªããŸã ã¬ã³ããŒãã³ãã¬ãŒãã ã€ãŸããããã·ã¥ä»ãã®èšå·ã¯
çžåœããã¢ã³ããŒã¹ã³ã¢ãã·ã£ããŠã€ã³ã°ãããã®éãåæ§ã§ãã
ãã«ãã€ã³
Hy ã«ã¯ãæ£ãã Python AST ãçæããããã«äœ¿çšãããç¹å¥ãªãã©ãŒã ãå€æ°åãã£ãŠããŸãã
以äžã¯ãç¹å¥ãªã圢åŒã§ãããäžéšã§ã¯äºæããªãåäœãããå¯èœæ§ããããŸãã
ããã€ãã®ç¶æ³ã
.
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
. ãªããžã§ã¯ãã®å±æ§ã¢ã¯ã»ã¹ãå®è¡ããããã«äœ¿çšãããŸãã å°èŠæš¡ãª DSL ã䜿çšããŠãè¿ éãªåŠçãå¯èœã«ããŸãã
ãã¹ããããããŒã¿æ§é å ã®å±æ§ãšé ç®ãžã®ã¢ã¯ã»ã¹ã
äŸãã°ã
(.foo bar baz [(+ 1 2)] ããã)
ã³ã³ãã€ã«ãããšæ¬¡ã®ããã«ãªããŸãã
foo.bar.baz[1 + 2].frob
. æåã®åŒæ°ãã³ã³ãã€ã«ããŸã (äŸã§ã¯ã foo) ãå®è¡ãããªããžã§ã¯ããšããŠ
å±æ§ã®éåç §ã ã¢ã¯ã»ã¹ããããã®å±æ§ãšããŠè£žã®ã·ã³ãã«ã䜿çšããŸã (äŸã§ã¯ã ããŒ,
ããº, ããã)ããªã¹ãã®å 容ãã³ã³ãã€ã«ããŸã (äŸã§ã¯ã [(+ 1 2)]) ã€ã³ããã¯ã¹äœæçšã
ä»ã®åŒæ°ã¯ã³ã³ãã€ã« ãšã©ãŒãã¹ããŒããŸãã
äžæãªå±æ§ã«ã¢ã¯ã»ã¹ãããšã å±æ§ãšã©ãŒã äžæãªããŒã«ã¢ã¯ã»ã¹ãããšã
ã€ã³ããã¯ã¹ãšã©ãŒ (ãªã¹ãããã³ã¿ãã«äž) ãŸã㯠ããŒãšã©ãŒ ïŒèŸæžã«èŒã£ãŠããŸãïŒã
->
-> ïŒãŸã㯠ã¹ã¬ããã£ã³ã° ãã¯ã) ã¯ãåŒã®ãã¹ããé¿ããããã«äœ¿çšãããŸãã ã¹ã¬ãããã¯ã
ååŒã次ã®åŒã®æåã®åŒæ°ã®å Žæã«æ¿å ¥ããŸãã 以äž
ã³ãŒãã¯ããã瀺ããŠããŸã:
=> (defn åºå [ab] (print ab))
=> (-> (+ 4 6) (åºå 5))
10 5
->>
->> ïŒãŸã㯠ã¹ã¬ããã£ã³ã° tail ãã¯ã) ã«äŒŒãŠããŸã ã¹ã¬ããã£ã³ã° ãã¯ããããã代ããã«
ååŒã次ã®åŒã®æåã®åŒæ°ã«æ¿å ¥ãããšãããã
æåŸã®åŒæ°ã 次ã®ã³ãŒãã¯ããã瀺ããŠããŸãã
=> (defn åºå [ab] (print ab))
=> (->> (+ 4 6) (åºå 5))
5 10
é©çšãã
é©çšãã åŒæ°ã®ãªãã·ã§ã³ã®ãªã¹ããš kwargs ã®ãªãã·ã§ã³ã®èŸæžãé©çšããããã«äœ¿çšãããŸãã
é¢æ°ã«ã
䜿çšæ³ïŒ ïŒç³ã蟌㿠fn-name [åŒæ°] [ã¯ã¯ãŒã°ã¹])
äŸïŒ
(å®çŸ©ãµã³ã¯ []
ãããã«ã¡ã¯ãïŒ
(ãµã³ã¯ãé©çš)
;=> ãããã«ã¡ã¯ã
(å®çŸ©åèšè³Œå ¥é¡ [äŸ¡æ Œéé¡ & ãªãã·ã§ã³ [ææ°æ 1.05] [ä»å 䟡å€çš 1.1]]
(*äŸ¡æ Œã»éé¡ã»ææ°æã»æ¶è²»çš))
(åèšè³Œå ¥é¡[10 15]ãé©çš)
;=> 173.25
(åèšè³Œå ¥é¡ [10 15] {"vat" 1.05} ãé©çš)
;=> 165.375
(apply total-purchase [] {"price" 10 "amount" 15 "vat" 1.05})
;=> 165.375
&
& è«çåŒã§äœ¿çšãããŸãã å°ãªããšã XNUMX ã€ã®ãã©ã¡ãŒã¿ãå¿ èŠã§ãã ãã¹ãŠã®ãã©ã¡ãŒã¿ã®å Žå
è©äŸ¡ãã â¯ãæåŸã®ãã©ã¡ãŒã¿ãè¿ãããŸãã ãã以å€ã®å Žåã¯ãæåã® false å€
è¿ãããŸãã 䜿çšäŸ:
=> (ãããŠçåœ)
Ã
=> (ãããŠçãç)
â¯
=> (ãããŠç 1)
1
=> (ããã³ True [] False True)
[]
泚æïŒ
& æåã® false ãè¿ããããšããã«ãã©ã¡ãŒã¿ã®è©äŸ¡ãã·ã§ãŒãããŠåæ¢ããŸãã
ééããã
=> (ããã³ False (ãhelloããåºå))
Ã
ã¢ãµãŒã
ã¢ãµãŒã ããã°ã©ã ã®å®è¡äžã«æ¡ä»¶ã確èªããããã«äœ¿çšãããŸãã æ¡ä»¶ãæŽã£ãŠããªãå Žå
äŒã£ãã ã¢ãµãŒã·ã§ã³ ãšã©ãŒ äžããããŸãã ã¢ãµãŒã XNUMX ã€ãŸã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåãããšãã§ããŸãã æå
ãã©ã¡ãŒã¿ã¯ãã§ãã¯ããæ¡ä»¶ã§ããã次ã®ããããã«è©äŸ¡ãããå¿ èŠããããŸãã ⯠or ÃãéžæããŸãã
XNUMX çªç®ã®ãã©ã¡ãŒã¿ã¯ãªãã·ã§ã³ã§ãã¢ãµãŒãã®ã©ãã«ã§ããã
ãšäžç·ã«è²ãŠããã ã¢ãµãŒã·ã§ã³ ãšã©ãŒ äŸãã°ïŒ
(assert(=å€æ°æåŸ å€))
(åœã䞻匵)
; ã¢ãµãŒã·ã§ã³ ãšã©ãŒ
(ã¢ãµãŒã (= 1 2) ãXNUMX 㯠XNUMX ã«çããã¯ãã§ãã)
; AssertionError: XNUMX 㯠XNUMX ã«çããå¿ èŠããããŸã
é£æ³
é£æ³ ããŒãèŸæžå ã®å€ã«é¢é£ä»ãããããªã¹ãã®ã€ã³ããã¯ã¹ãèšå®ãããããããã«äœ¿çšãããŸãã
å€ã«ã å°ãªããšã XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã ããŒã¿ æ§é å€æŽãããã ããŒ
or indexããš å€ã XNUMX ã€ä»¥äžã®ãã©ã¡ãŒã¿ã䜿çšãããå Žåããã¢ã§é¢é£ä»ããããŸãã
䜿çšäŸïŒ
=>(let [[ã³ã¬ã¯ã·ã§ã³ {}]]
... (ã¢ãœã·ãšã€ãã³ã¬ã¯ã·ã§ã³ãç¬ããæš¹ç®ã)
... (çç»é))
{u'ç¬': u'å ãã'}
=>(let [[ã³ã¬ã¯ã·ã§ã³ {}]]
... (ã¢ãœã·ãšã€ãã³ã¬ã¯ã·ã§ã³ãç¬ãã鳎ã声ããç«ãããã£ãŒã)
... (çç»é))
{u'ç«': u'ãã£ãŒ'ãu'ç¬': u'å ãã'}
=>(let [[ã³ã¬ã¯ã·ã§ã³ [1 2 3 4]]]
... (é¢é£ã³ã¬ã¯ã·ã§ã³ 2 ãªã)
... (çç»é))
[1ã2ããªãã4]
泚æïŒ
é£æ³ ããŒã¿æ§é ãé©åã«å€æŽããŠè¿ããŸãã ãªã.
ç Žã
ç Žã ã«ãŒãããæãåºãããã«äœ¿çšããŸãã ã«ãŒãã¯çŽã¡ã«çµäºããŸãã 以äž
äŸã«ã¯ç¡éããããŸã while ãŠãŒã¶ãŒãå ¥åãããšããã«çµäºããã«ãŒã k.
(while True (if (= "k" (çã®å ¥å "? "))
ïŒå£ãïŒ
(ãããäžåºŠè©ŠããŠãã ããããšå°å·ããŸã)))
æ¡ä»¶
æ¡ä»¶ ãã¹ããããæ§ç¯ã«äœ¿çšã§ããŸã if çºèšã 次ã®äŸã¯ã
ãã¯ããšãã®å±éã®é¢ä¿:
(cond [æ¡ä»¶-1 çµæ-1]
[æ¡ä»¶-2 çµæ-2])
(if æ¡ä»¶-1 çµæ-1
(if æ¡ä»¶-2 çµæ-2))
以äžã«ç€ºãããã«ãæåã«äžèŽããçµæãããã¯ã®ã¿ãå®è¡ãããŸãã
=> (defn ãã§ãã¯å€ [å€]
... (cond [(< value 5) (print "å€ã 5 ããå°ãã")]
... [(= å€ 5) (print "å€ã¯ 5 ã«çãã")]
... [(> å€ 5) (print "å€ã¯ 5 ãã倧ãã")]
... [True (print "å€ã¯ãããã¹ãã§ã¯ãªããã®ã§ã")]))
=> (ãã§ãã¯å€ 6)
å€ã 5 ãã倧ãã
ç¶ãã
ç¶ãã å®è¡ãã«ãŒãã®å é ã«æ»ããŸãã 次ã®äŸã§ã¯ã
(å¯äœçš1) å埩ããšã«åŒã³åºãããŸãã (å¯äœçš2)ãã ããåŒã³åºãããã®ã¯
ãªã¹ãå ã® XNUMX ã€ããã®å€ã
;; (side-effect1) ãš (side-effect2) ãé¢æ°ã§ãããšä»®å®ãã
;; ã³ã¬ã¯ã·ã§ã³ã¯æ°å€ã®ãªã¹ãã§ã
([x ã³ã¬ã¯ã·ã§ã³] ã®å Žå)
ïŒãã
(å¯äœçš1 x)
(if (% x 2)
ïŒç¶ãïŒïŒ
(å¯äœçš2 x)))
dict-comp
dict-comp èŸæžã®äœæã«äœ¿çšãããŸãã XNUMX ã€ãŸã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã æå
XNUMX ã€ã®ãã©ã¡ãŒã¿ã¯æ»ãå€ (ããŒãšå€ã®ãã¢) ãå¶åŸ¡ããããã®ãã®ã§ãXNUMX ã€ç®ã¯
ã·ãŒã±ã³ã¹ããé ç®ãéžæããããã«äœ¿çšãããŸãã XNUMX çªç®ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã¯ã次ã®ç®çã§äœ¿çšã§ããŸãã
æ¡ä»¶åŒã«åºã¥ããŠã·ãŒã±ã³ã¹å ã®äžéšã®é ç®ããã£ã«ã¿ãŒã§é€å€ããŸãã
=> (dict-comp x (* x 2) [x (ç¯å² 10)] (å¥æ°? x))
{1:2ã3:6ã9:18ã5:10ã7:14}
do / çªèµ·
do & çªèµ· ã¯ãããããã®åŒæ°ãè©äŸ¡ããæåŸã®åŒæ°ãè¿ãããã«äœ¿çšãããŸãã æ»ã
æåŸã®åŒæ°ä»¥å€ã®ãã¹ãŠã®åŒæ°ã®å€ã¯ç Žæ£ãããŸãã ã§äœ¿çšã§ããŸã ã©ã ã or
ãªã¹ãã³ã³ã 次ã®ããããã®äŸã«ç€ºãããã«ãããè€éãªããžãã¯ãå®è¡ããŸãã
䜿çšäŸ:
=> (true ã®å Žå
... (å®è¡ããŠãã ãã (ãå¯äœçšã¯ããã¯ã§ã!ããšå°å·ããŸã)
... (ãã¯ããæ¬åœã«!ããšå°å·ããŸã)))
å¯äœçšã¯ãããïŒ
ããæ¬åœïŒ
;; (å¯äœçš) ãããããã«å¯ŸããŠåŒã³åºãããé¢æ°ã§ãããšä»®å®ããŸãã
;; ãªã¹ãå ã®ãã¹ãŠã®å€ã§ããããã®æ»ãå€ã¯æ°ã«ããŸãã
=> (list-comp (do (å¯äœçš x)
... (if (< x 5) (* 2 x)
... (* 4 x)))
... (x (ç¯å² 10)))
[0ã2ã4ã6ã8ã20ã24ã28ã32ã36]
do 1 ãã n ãŸã§ã®ä»»æã®æ°ã®åŒæ°ãåãå ¥ããããšãã§ããŸãã
def / ã»ãã
def & ã»ãã å€ããªããžã§ã¯ãããŸãã¯é¢æ°ãã·ã³ãã«ã«ãã€ã³ãããããã«äœ¿çšãããŸãã äŸãã°ïŒ
=> (ããã©ã«ãå ["ã¢ãªã¹" "ãã" "ãã£ãŒãªãŒ"])
=> (ååãå°å·)
[u'ã¢ãªã¹'ãu'ãã'ãu'ãã£ãŒãªãŒ']
=> (setv counter (fn [ã³ã¬ã¯ã·ã§ã³é ç®] (.count ã³ã¬ã¯ã·ã§ã³é ç®)))
=> (ã«ãŠã³ã¿ãŒ [1 2 3 4 5 2 3] 2)
2
ããã¯ã©ã¹
æ°ããã¯ã©ã¹ã¯æ¬¡ã®ããã«å®£èšãããŸã ããã¯ã©ã¹ã XNUMX ã€ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãåãããšãã§ããŸã: ãã¯ãã«
å¯èœãªã¹ãŒããŒã¯ã©ã¹ãšãæ°ããã¯ã©ã¹ã®å±æ§ãå«ãå¥ã®ãã¯ãã«ãå®çŸ©ããŸãã
ã¯ã©ã¹ã XNUMX ã€ã®é ç®ãã¯ãã«ãšããŠæ±ããŸãã
(defclass ã¯ã©ã¹å [ã¹ãŒããŒã¯ã©ã¹-1 ã¹ãŒããŒã¯ã©ã¹-2]
[[å±æ§å€]])
以äžã®äŸã«ç€ºãããã«ãå€ãšé¢æ°ã®äž¡æ¹ãæ°ããã¯ã©ã¹ã«ãã€ã³ãã§ããŸãã
=> (defclass Cat []
... [[幎霢ãªã]
... [ã«ã©ãŒããã¯ã€ãã]
... [話ã (fn [self] (print "ãã£ãŒ"))]])
=> (ããã©ã«ãã¹ããã(ç«))
=> (setv Spot.colour "ãã©ãã¯")
'é»'
=> (.ã¹ããŒã¯ã¹ããã)
ãã£ãŒ
å®çŸ© / ããã¡ã³
å®çŸ© & ããã¡ã³ ãã¯ãã¯é¢æ°ãå®çŸ©ããããã«äœ¿çšãããŸãã ããã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã å
å®çŸ©ããé¢æ°ã®ãã¯ãã«ã ãã©ã¡ãŒã¿ã ãããŠãã® ãã㣠é¢æ°ã®:
(å®çŸ©å [ãã©ã¡ãŒã¿] æ¬äœ)
ãã©ã¡ãŒã¿ã®åã«æ¬¡ã®ããŒã¯ãŒããä»ããããšãã§ããŸãã
ãªãã·ã§ã³(&ãªãã·ã§ã³)
ãã©ã¡ãŒã¿ã¯ãªãã·ã§ã³ã§ãã ãã©ã¡ãŒã¿ã¯ XNUMX ã€ã®é ç®ãªã¹ããšããŠæå®ã§ããŸãã
æåã®èŠçŽ ã¯ãã©ã¡ãŒã¿åã§ãXNUMX çªç®ã®èŠçŽ ã¯ããã©ã«ãå€ã§ãã ãã©ã¡ãŒã¿
åäžã®é ç®ãšããŠæå®ããããšãã§ããŸãããã®å Žåã®ããã©ã«ãå€ã¯æ¬¡ã®ãšããã§ãã ãªã.
=> (defn åèšå€ [å€ &ãªãã·ã§ã³ [ä»å 䟡å€çš 10]]
... (+ (/ (* ä»å 䟡å€çšé¡) 100) å€))
=> (åèšå€100)
110.0
=> (åèšå€ 100 1)
101.0
ïŒéµ
ã¯ã¯ãŒã°ã¹(&K)
ãã©ã¡ãŒã¿ã«ã¯ 0 å以äžã®ããŒã¯ãŒãåŒæ°ãå«ãŸããŸãã
次ã®ã³ãŒãäŸã§ã¯ããã¹ãŠã®ããŒã¯ãŒããåºåããé¢æ°ãå®çŸ©ããŠããŸãã
åŒæ°ãšãã®å€ã
=> (defn print-parameters [&kwargs kwargs]
... (for [(, kv) (.items kwargs)] (print kv)))
=> (å°å·ãã©ã¡ãŒã¿ãé©çš [] {"ãã©ã¡ãŒã¿-1" 1 "ãã©ã¡ãŒã¿-2" 2})
ãã©ã¡ãŒã¿-2 2
ãã©ã¡ãŒã¿-1 1
ïŒäŒã¿ ãã©ã¡ãŒã¿ã«ã¯ 0 å以äžã®äœçœ®åŒæ°ãå«ãŸããŸãã ä»ã«ããžã·ã§ã³ã¯ãããŸãã
ãã®åŒæ°ã®åŸã«åŒæ°ãæå®ã§ããŸãã
次ã®ã³ãŒãäŸã§ã¯ã0 ïœ n ã®æ°å€ãäžããããšãã§ããé¢æ°ãå®çŸ©ããŠããŸãã
ãã©ã¡ãŒã¿ãŒã 次ã«ããã¹ãŠã®å¥æ°ãåèšãããã¹ãŠã®å¶æ°ãæžç®ããŸãã
=> (defn ãžã°ã¶ã°ãµã [&æ®ãã®æ°å]
(let [[å¥æ° (list-comp x [x æ°å€] (å¥æ°? x))]
[å¶æ° (list-comp x [x æ°å€] (å¶æ°? x))]]
(- (å¥æ°ã®åèš) (å¶æ°ã®åèš))))
=> (ãžã°ã¶ã°ãµã )
0
=> (ãžã°ã¶ã°å 3 9 4)
8
=> (ãžã°ã¶ã°å 1 2 3 4 5 6)
-3
å®çŸ©ãšã€ãªã¢ã¹ / ããã¡ã³ãšã€ãªã¢ã¹
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
ã å®çŸ©ãšã€ãªã¢ã¹ & ããã¡ã³ãšã€ãªã¢ã¹ ãã¯ãã¯ãã䌌ãŠããŸã å®çŸ©ããšããåºå¥ä»ãã§ã
åäžã®ååã§é¢æ°ãå®çŸ©ãã代ããã«ããšã€ãªã¢ã¹ãå®çŸ©ããããšãã§ããŸãã ä»ã®
æåã®ãã©ã¡ãŒã¿ãšããŠé¢æ°åã®ã·ã³ãã«ã®ãªã¹ããååŸããã®ã§ã¯ãªãã å®çŸ©ãšã€ãªã¢ã¹ &
ããã¡ã³ãšã€ãªã¢ã¹ ãšéãã¯ãããŸãã å®çŸ© & ããã¡ã³.
=> (defn-alias [ã¡ã€ã³åã®ãšã€ãªã¢ã¹] []
... (ãããã«ã¡ã¯!ããšå°å·))
=> (ã¡ã€ã³å)
"ããã«ã¡ã¯ïŒ"
=> (ãšã€ãªã¢ã¹)
"ããã«ã¡ã¯ïŒ"
å®çŸ©ãã
ããŒãžã§ã³ 0.10.1 ã®æ°æ©èœã
ã å®çŸ©ãã ãã¯ãã¯ãããã«åŒã³åºããã main é¢æ°ãå®çŸ©ããŸãã sys.argv as
ãã®ãã¡ã€ã«ãã¹ã¯ãªãããšããŠå®è¡ãããŠããå Žåã«éããåŒæ°ãæå®ããŸãã ã€ãŸããããã¯æ¬¡ã®ãšããã§ãã
(defmain [&rest args]
(åŒæ°ã§äœãããã))
ã¯ä»¥äžãšåçã§ã:
def main(*args):
do_something_with(args)
0ãè¿ã
__name__ == "__main__"ã®å Žå:
ã€ã³ããŒãã·ã¹ãã
retval = main(*sys.arg)
if isinstance(retval, int):
sys.exit(retval)
äžã§ãããããã«ããã®é¢æ°ããæŽæ°ãè¿ãå Žåãããã¯æ¬¡ã®ããã«ãªããŸãã
ã¹ã¯ãªããã®çµäºã¹ããŒã¿ã¹ãšããŠäœ¿çšãããŸãã (ããã§ãªãå ŽåãPython ã¯ããã©ã«ãã§ã¹ããŒã¿ã¹ 0 ãçµäºããŸãã
ã€ãŸãããã¹ãŠã倧äžå€«ã§ãïŒ)
ïŒä»¥æ¥ (sys.exit 0) ããéæŽæ°ãè¿ãããå Žåã«ã¯æ瀺çã«å®è¡ãããŸããã
å®çŸ©ããããšçœ®ããšè¯ãã§ãããã (ããã©ã«ã) ãã¡ã€ã«ã®æåŸã®ã³ãŒããšããŠã)
ãããã¯ã
ãããã¯ã ãã¯ããå®çŸ©ããããã«äœ¿çšãããŸãã äžè¬çãªåœ¢åŒã¯æ¬¡ã®ãšããã§ã (ãããã¯ã å [ãã©ã¡ãŒã¿ãŒ]
exprïŒ.
次ã®äŸã§ã¯ãã³ãŒãå ã®èŠçŽ ã®é åºã亀æããããã«äœ¿çšã§ãããã¯ããå®çŸ©ããŸãã
ãŠãŒã¶ãŒãäžçœ®èšæ³ã§ã³ãŒããèšè¿°ã§ããããã«ããŸããæŒç®åã¯
ãªãã©ã³ãã
=> (defmacro infix [ã³ãŒã]
... (æºåŒçš (
... (åŒçšç¬Šãå€ããŸã (ã³ãŒã 1 ãååŸ))
... (åŒçšç¬Šãå€ããŸã (ã³ãŒã 0 ãååŸ))
... (åŒçšç¬Šãå€ããŸã (ã³ãŒã 2 ãååŸ))))
=> (äžçœ® (1 + 1))
2
defmacro ãšã€ãªã¢ã¹
defmacro ãšã€ãªã¢ã¹ è€æ°ã®åå (ãšã€ãªã¢ã¹) ãæã€ãã¯ããå®çŸ©ããããã«äœ¿çšãããŸãã äžè¬çãªåœ¢åŒ
is (defmacro-alias [åå] [ãã©ã¡ãŒã¿ãŒ] exprïŒã åãå 容ã§è€æ°ã®ãã¯ããäœæããŸã
æå®ãããååã®ãªã¹ãã®äžã«ãããã©ã¡ãŒã¿ãŒã®ãªã¹ããšæ¬äœã
次ã®äŸã§ã¯ XNUMX ã€ã®ãã¯ããå®çŸ©ããŠãããã©ã¡ãã®ãã¯ãã§ããŠãŒã¶ãŒã¯ã³ãŒããèšè¿°ã§ããŸãã
äžçœ®èšæ³ã
=> (defmacro-alias [infix infi] [ã³ãŒã]
... (æºåŒçš (
... (åŒçšç¬Šãå€ããŸã (ã³ãŒã 1 ãååŸ))
... (åŒçšç¬Šãå€ããŸã (ã³ãŒã 0 ãååŸ))
... (åŒçšç¬Šãå€ããŸã (ã³ãŒã 2 ãååŸ))))
=> (äžçœ® (1 + 1))
2
=> (infi (1 + 1))
2
ãããã¯ã/g!
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
ãããã¯ã/g! ã®ç¹å¥ããŒãžã§ã³ã§ã ãããã¯ã èªåçã«çæããããã«äœ¿çšãããŸã ã²ã³ã·ã
ã§å§ãŸãèšå·ã®å Žå g!.
ããšãã°ã ãïŒ ã«ãªã (gensym ãããïŒ.
é¢é£é ç® ALSOïŒ
ã»ã¯ã·ã§ã³ using-gensym
ææè
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
ææè ãªãŒã㌠ãã¯ããå®çŸ©ããæ§æãåæ§ç¯ãŸãã¯å€æŽã§ããããã«ããŸãã
=> (defreader ^ [expr] (print expr))
=> #^(1 2 3 4)
ïŒ1 2 3 4ïŒ
=> #^ãããã«ã¡ã¯ã
"ããã«ã¡ã¯"
é¢é£é ç® ALSOïŒ
ã»ã¯ã·ã§ã³ãªãŒããŒãã¯ã
ã€ã³ã¯ã«ãŒã
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
ã€ã³ã¯ã«ãŒã çŸåšã®åå空éãããªããžã§ã¯ããåé€ããŸãã
=> (setv foo 42)
=> (ãã«ããŒ)
=> ãµãŒ
ãã¬ãŒã¹ããã¯ïŒæåŸã®æåŸã®åŒã³åºãïŒïŒ
ãã¡ã€ã« " "ã1è¡ç®ã
NameError: ååãfooããå®çŸ©ãããŠããŸãã
ã€ã³ã¯ã«ãŒã ãããã³ã°ããªã¹ããªã©ãããªããžã§ã¯ããåé€ããããšãã§ããŸãã
=> (setv ãã¹ã (ãªã¹ã (ç¯å² 10)))
=> ãã¹ã
[0ã1ã2ã3ã4ã5ã6ã7ã8ã9]
=> (del (ã¹ã©ã€ã¹ ãã¹ã 2 4)) ;; é€å€é ç® 2 ïœ 4 ããé ç®ãåé€ããŸã
=> ãã¹ã
[0ã1ã4ã5ã6ã7ã8ã9]
=> (setv dic {"foo" "bar"})
=>ãã£ãã¯
{"foo": "ããŒ"}
=> (del (get dic "foo"))
=>ãã£ãã¯
{}
ã©ãš
ããŒãžã§ã³ 0.10.1 ã®æ°æ©èœã
ã©ãš ãªããžã§ã¯ããžã®äžé£ã®ã¡ãœããåŒã³åºããç°¡çŽ åããããã«äœ¿çšãããŸãã
=> (doto [] (.append 1) (.append 2) .reverse)
[2 1]
=> (setv ã³ã¬ã¯ã·ã§ã³ [])
=> (.append ã³ã¬ã¯ã·ã§ã³ 1)
=> (.append ã³ã¬ã¯ã·ã§ã³ 2)
=> (.reverse ã³ã¬ã¯ã·ã§ã³)
=> ã³ã¬ã¯ã·ã§ã³
[2 1]
è©äŸ¡ãã
è©äŸ¡ãã åŒçšç¬Šã§å²ãŸããåŒãè©äŸ¡ããå€ãè¿ããŸãã
=> (eval '(print "Hello World"))
"ããã«ã¡ã¯äžç"
è©äŸ¡ããŠã³ã³ãã€ã«ãã
ã³ã³ãã€ã«æã®è©äŸ¡
æåã® / èªåè»
æåã® & èªåè» ã³ã¬ã¯ã·ã§ã³ã®æåã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããã®ãã¯ãã§ãã
=> (æå (ç¯å² 10))
0
for
for ãªã¹ããŸãã¯ãã¯ãã«å ã®åèŠçŽ ã®é¢æ°ãåŒã³åºãããã«äœ¿çšãããŸãã ããããã®çµæ
ã³ãŒã«ã¯ç Žæ£ããã for åŒã¯æ»ããŸã ãªã ãã®ä»£ããã ãµã³ãã«ã³ãŒãã¯å埩ããŸã
ã ã³ã¬ã¯ã·ã§ã³ ãããŠããããã®ããã« çŽ å in ã³ã¬ã¯ã·ã§ã³ ãã® å¯äœçš ãšæ©èœãã
çŽ å ãã®åŒæ°ãšããŠ:
;; (å¯äœçš) ãåäžã®ãã©ã¡ãŒã¿ãåãé¢æ°ã§ãããšä»®å®ããŸãã
([èŠçŽ ã³ã¬ã¯ã·ã§ã³] (å¯äœçšèŠçŽ ) ã®å Žå)
;; for ã«ã¯ãªãã·ã§ã³ã® else ãããã¯ãå«ããããšãã§ããŸã
([èŠçŽ ã³ã¬ã¯ã·ã§ã³] ã®å Žå (å¯äœçšèŠçŽ )
(else (å¯äœçš-2)))
ãªãã·ã§ã³ ã»ãã« ãããã¯ã¯ã次ã®å Žåã«ã®ã¿å®è¡ãããŸãã for ã«ãŒãã¯æ£åžžã«çµäºããŸãã ãã
å®è¡ã¯æ¬¡ã®ããã«åæ¢ãããŸã ç Žã ã»ãã« ãããã¯ã¯å®è¡ãããŸããã
=> (for [èŠçŽ [1 2 3]] (if (< èŠçŽ 3)
... (å°å·èŠçŽ )
... ïŒå£ãïŒïŒ
... (else ("ã«ãŒããçµäºããŸãã" ãåºå)))
1
2
=> (for [èŠçŽ [1 2 3]] (if (< èŠçŽ 4)
... (å°å·èŠçŽ )
... ïŒå£ãïŒïŒ
... (else ("ã«ãŒããçµäºããŸãã" ãåºå)))
1
2
3
ã«ãŒããçµäºããŸãã
ãžã§ãã¯ã¹ããŒ
ãžã§ãã¯ã¹ã㌠ãžã§ãã¬ãŒã¿åŒãäœæããããã«äœ¿çšãããŸãã XNUMX ã€ãŸã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã ã®
æåã®ãã©ã¡ãŒã¿ã¯æ»ãå€ãå¶åŸ¡ããåŒã§ãããXNUMX çªç®ã®ãã©ã¡ãŒã¿ã¯äœ¿çšãããŸãã
ãªã¹ãããé ç®ãéžæããŸãã XNUMX çªç®ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã¯ããã£ã«ã¿ãªã³ã°ã§é€å€ããããã«äœ¿çšã§ããŸãã
ãªã¹ãå ã®äžéšã®é ç®ã¯æ¡ä»¶åŒã«åºã¥ããŠããŸãã ãžã§ãã¯ã¹ã㌠ã«äŒŒãŠããŸã
ãªã¹ãã³ã³ããã ããå€ã XNUMX ã€ãã€è©äŸ¡ããå埩å¯èœãªããžã§ã¯ããè¿ãç¹ãç°ãªããŸãã
ããã«è©äŸ¡ããŸãã
=> (def ã³ã¬ã¯ã·ã§ã³ (ç¯å² 10))
=> (def ãã£ã«ã¿ãŒæžã¿ (genexpr x [x ã³ã¬ã¯ã·ã§ã³] (even? x)))
=> (ãã£ã«ã¿ãªã³ã°ããããªã¹ã)
[0ã2ã4ã6ã8]
ã²ã³ã·ã
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
ã²ã³ã·ã ã䜿çšããã«ãã¯ããèšè¿°ã§ããããã«ããåºæã®ã·ã³ãã«ãçæããããã«äœ¿çšãããŸãã
å€æ°åãå¶ç¶ã«è¡çªããŠããŸãã
=> (gensym)
u':G_1235'
=> (gensym "x")
u':x_1236'
é¢é£é ç® ALSOïŒ
ã»ã¯ã·ã§ã³ using-gensym
ååŸãã
ååŸãã ãªã¹ãããã³èŸæžå ã®åäžèŠçŽ ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããŸãã ååŸãã 次㮠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã
ã ããŒã¿ æ§é ãš index or ã㌠ã¢ã€ãã ã®ã 察å¿ãããã®ãè¿ããŸã
èŸæžãŸãã¯ãªã¹ãããã®å€ã 䜿çšäŸ:
=> (let [[åç© {"ç¬" "å ãã" "ç«" "ãã£ãŒ"}]
... [æ°å [ããŒãããäžããäºããäžã]]]
... (å°å· (åç©ãç¬ããååŸ))
... (å°å· (æ°å€ 2 ãååŸ)))
æš¹ç®
2
泚æïŒ
ååŸãã ååšããªãããŒã«å¯ŸããŠèŸæžãç §äŒãããå ŽåãKeyError ãçºçããŸãã
泚æïŒ
ååŸãã ç¯å²å€ã®ã€ã³ããã¯ã¹ã«å¯ŸããŠãªã¹ããŸãã¯ã¿ãã«ãã¯ãšãªãããå ŽåãIndexError ãçºçããŸãã
å¢çã
å šäœçãª
å šäœç㪠ã·ã³ãã«ãã°ããŒãã«ãšããŠããŒã¯ããããã«äœ¿çšã§ããŸãã ããã«ãããããã°ã©ãã¯ã
å€ãã°ããŒãã«ã·ã³ãã«ã«èšå®ããŸãã ã°ããŒãã« ã·ã³ãã«ã®èªã¿åãã«ã¯ã å šäœç㪠ããŒã¯ãŒã --
ä»£å ¥ããã ãã§ãã
次ã®äŸã¯ãã°ããŒãã« ã·ã³ãã«ãã©ã®ããã«äœ¿çšããããã瀺ããŠããŸãã a é¢æ°å ã§å€ãå²ãåœãŠããã
åŸã§å¥ã®é¢æ°ã§åºåãããŸãã ãªãã§ å šäœç㪠ããŒã¯ãŒããXNUMX çªç®ã®é¢æ°
ãæããã ãã ååãšã©ãŒ.
(defn set-a [å€]
(ã°ããŒãã«a)
(å€ãèšå®))
(defn print-a []
(a)ãå°å·)
(ã»ãã-a 5)
(å°å·-a)
if / ãªãå Žå
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœ: if-not
if å®è¡ããã³ãŒããæ¡ä»¶ä»ãã§éžæããããã«äœ¿çšãããŸãã æ¡ä»¶ãå«ããå¿ èŠããããŸã
ãããã¯ãšãæ¡ä»¶ãããã¯ã次ã®ããã«è©äŸ¡ãããå Žåã«å®è¡ãããããã㯠â¯ã ãªãã·ã§ã³ã§ã
æ¡ä»¶ã®è©äŸ¡ã次ã®å Žåã«å®è¡ãããæçµãããã¯ãå«ãŸããå ŽåããããŸãã
Ã.
ãªãå Žå åæ§ã§ãããæ¡ä»¶ã倱æãããš XNUMX çªç®ã®ãããã¯ãå®è¡ãããŸãã
XNUMX çªç®ãšæåŸã®ãããã¯ã¯ããã¹ããæåãããšå®è¡ãããŸããããã¯éã®é åºã§ãã if.
䜿çšäŸïŒ
(if (ãéãæ®ã£ãŠãã? ã¢ã«ãŠã³ã)
ïŒãè²·ãç©ã«è¡ããããå°å·ïŒ
(ãä»äºã«è¡ããŸãããããšå°å·))
(ããã§ãªãå Žå (ãéãæ®ã£ãŠãã? ã¢ã«ãŠã³ã)
(ãä»äºã«è¡ããŸãããããå°å·)
(ãè²·ãç©ã«è¡ããããšå°å·))
Python ã®çå®æ§ãå°éãããŸãã ãªã, Ããä»»æã®æ°å€åã®ãŒãã空ã®ã·ãŒã±ã³ã¹ã
ããã³ç©ºã®èŸæžãèæ ®ãããŸã Ã; ä»ã®ãã¹ãŠãèæ ®ãããŸã â¯.
Lisp-if / LIF & Lisp-if-not / ã©ã€ãããã
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
ããŒãžã§ã³ 0.10.2 ã®æ°æ©èœ: lisp-if-not / lif-not
ãã Lispy ã奜ã人åã if æ¡é ãæã ã¯æã£ãŠããŸã Lisp-ifãŸã㯠LIFã ãã® ã® èæ ®ãã
ãªã / ãŒã åã§ããããšïŒ ä»ã®ãåœã£ãœããPython å€ã¯ãã¹ãŠ true ãšã¿ãªãããŸãã
éã«ãç§ãã¡ã¯ Lisp-if-not & ã©ã€ãããã ãšäžŠè¡ã㊠if & ãªãå Žå é転ããã®ã¯
æ¯èŒã
=> (lisp-if True "true" "false")
"ç"
=> (lisp-if False "true" "false")
"ç"
=> (lisp-if 0 "true" "false")
"ç"
=> (lisp-if nil "true" "false")
"NS"
=> (lisp-if None "true" "false")
"NS"
=> (lisp-if-not nil "true" "false")
"ç"
=> (lisp-if-not None "true" "false")
"ç"
=> (lisp-if-not False "true" "false")
"NS"
; åçã ãçã
=> (lif True "true" "false")
"ç"
=> (lif nil "true" "false")
"NS"
=> (lif-not None "true" "false")
"ç"
import
import Python ã®ããã«ã¢ãžã¥ãŒã«ãã€ã³ããŒãããããã«äœ¿çšãããŸãã ããã€ãã®æ¹æ³ããããŸã import ã§ãã
å©çšãããã
;; ãããã®åã¢ãžã¥ãŒã«ãã€ã³ããŒãããŸã
;;
;; ãã€ãœã³:
;; ã€ã³ããŒãã·ã¹ãã
;; OS.ãã¹ãã€ã³ããŒããã
(sys os.pathãã€ã³ããŒã)
;; ã¢ãžã¥ãŒã«ããã€ã³ããŒããã
;;
;; Python: os.path ããã€ã³ããŒããååšããŸããisdirãisfile
(ã€ã³ããŒã [os.path [isists isdir isfile]])
;; ãšã€ãªã¢ã¹ã䜿çšããŠã€ã³ããŒããã
;;
;; Python: sys ã systest ãšããŠã€ã³ããŒãããŸã
(ã€ã³ããŒã [sys :as systest])
;; ããŸããŸãªã¿ã€ãã®ã€ã³ããŒãã奜ããªã ããªã¹ãã§ããŸãã
(ã€ã³ããŒã [tests.resources [kwtest function-with-a-dash]]
[os.path [isdir isfile ãååšããŸã]]
[sys :as systest])
;; ãã¹ãŠã®ã¢ãžã¥ãŒã«é¢æ°ãçŸåšã®åå空éã«ã€ã³ããŒãããŸã
(ã€ã³ããŒã [sys [*]])
ã©ã ã / fn
ã©ã ã & fn ç¡åé¢æ°ãå®çŸ©ããããã«äœ¿çšã§ããŸãã ãã©ã¡ãŒã¿ã¯æ¬¡ã®ããã«ãªããŸã
å®çŸ©: æåã®ãã©ã¡ãŒã¿ã¯ãã©ã¡ãŒã¿ã®ãã¯ãã«ã§ãæ®ãã¯ãã©ã¡ãŒã¿ã®æ¬äœã§ãã
æ©èœã ã©ã ã æ°ããé¢æ°ãè¿ããŸãã 次ã®äŸã§ã¯ãç¡åé¢æ°
ãå®çŸ©ãããåºåããã£ã«ã¿ãªã³ã°ããããã«å¥ã®é¢æ°ã«æž¡ãããŸãã
=> (def people [{:name "ã¢ãªã¹" :幎霢 20}
... {:ååãããã:幎霢 25}
... {:ååããã£ãŒãªãŒã:50æ³}
... {:åå "ãã€ã" :5 æ³}])
=> (defn display-people [人ç©ãã£ã«ã¿ãŒ]
... (for [person people] (if (filter person) (print (:name person))))
=> (衚瀺-人 人 (fn [人] (< (:幎霢ã®äºº) 25)))
ã¢ãªã¹
ãã€ã
éåžžã®é¢æ°å®çŸ©ãšåæ§ã«ãæ¬äœã®æåã®èŠçŽ ãæååã®å Žåã
docstring ãšããŠæ©èœããŸãã ããã¯ãã¯ã©ã¹ ã¡ãœããã« docstring ãäžããå Žåã«äŸ¿å©ã§ãã
=> (setv ã® XNUMX å
... (fn [x]
... ãå ¥åã XNUMX ã§ä¹ç®ããçµæãè¿ããŸããã
... (* x 3)))
ãã㯠Python ã®çµã¿èŸŒã¿é¢æ°ã§ç¢ºèªã§ããŸãã å©ããŸã é¢æ°ïŒ
=> (ãã«ãÃXNUMX)
é¢æ° times_three ã®ãã«ã:
å_äž(x)
å ¥åã XNUMX ã§ä¹ç®ããçµæãè¿ããŸã
ïŒçµããïŒ
last
ããŒãžã§ã³ 0.10.2 ã®æ°æ©èœã
last ã³ã¬ã¯ã·ã§ã³ã®æåŸã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšã§ããŸãã
=> (æåŸ [2 4 6])
6
ã
ã åå¥ã¹ã³ãŒãã®å€æ°ãäœæããããã«äœ¿çšãããŸãã ãããã¯æåã«äœæãããŸãã
ã 圢æããã圢æãããåŸã¯ååšããªããªããŸãã 次ã®äŸã¯ããã瀺ããŠããŸã
è¡åïŒ
=> (let [[x 5]] (x ãåºå)
... ([[x 6]] ã«ããŠã¿ãŸã (x ãåºåããŸã))
... (x)ãå°å·)
5
6
5
ã ã ãã¯ã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸã: ãã¯ãã«ãå®çŸ©ãã variables ãš ãã㣠ã©ããåŸãŸãã
å®è¡ãããŸããã variables åèŠçŽ ãåäžã®å€æ°ãŸãã¯ãã¯ãã«ã§ãããã¯ãã«ã§ãã
å€æ°å€ã®ãã¢ãå®çŸ©ããŸãã åäžå€æ°ã®å Žåãå€ãä»£å ¥ãããŸãã
ãªã; ãã以å€ã®å Žåã¯ãæå®ãããå€ã䜿çšãããŸãã
=> (let [x [y 5]] (xy ãåºå))
ãªã5
ãªã¹ãã³ã³ã
ãªã¹ãã³ã³ã ãªã¹ãå å è¡šèšãå®è¡ããŸãã XNUMX ã€ãŸã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã æå
ãã©ã¡ãŒã¿ã¯æ»ãå€ãå¶åŸ¡ããåŒã§ãããXNUMX çªç®ã®ãã©ã¡ãŒã¿ã¯æ¬¡ã®ç®çã§äœ¿çšãããŸãã
ãªã¹ãããé ç®ãéžæããŸãã XNUMX çªç®ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã¯ãäžéšã®ãã£ã«ã¿ãŒãé€å€ããããã«äœ¿çšã§ããŸãã
æ¡ä»¶åŒã«åºã¥ããŠãªã¹ãå ã®é ç®ã®æ°ã決å®ããŸãã ããã€ãã®äŸïŒ
=> (def ã³ã¬ã¯ã·ã§ã³ (ç¯å² 10))
=> (ãªã¹ã-ã³ã³ã x [x ã³ã¬ã¯ã·ã§ã³])
[0ã1ã2ã3ã4ã5ã6ã7ã8ã9]
=> (ãªã¹ã-comp (* x 2) [x ã³ã¬ã¯ã·ã§ã³])
[0ã2ã4ã6ã8ã10ã12ã14ã16ã18]
=> (ãªã¹ã-comp (* x 2) [x ã³ã¬ã¯ã·ã§ã³] (< x 5))
[0ã2ã4ã6ã8]
è«çåŒã§äœ¿çšãããŸãã åäžã®ãã©ã¡ãŒã¿ãåãåããå転ããå€ãè¿ããŸãã
ççå€ã ããã ⯠ãã©ã¡ãŒã¿ãšããŠäžããããã à ãè¿ãããŸããããã®éãåæ§ã§ãã
䜿çšäŸïŒ
=> (çå®ã§ã¯ãããŸãã)
Ã
=> (åœã§ã¯ãªã)
â¯
=> (ãªãã§ã¯ãããŸãã)
â¯
or
or è«çåŒã§äœ¿çšãããŸãã å°ãªããšã XNUMX ã€ã®ãã©ã¡ãŒã¿ãå¿ èŠã§ãã è¿ãããŸã
æåã®é false ãã©ã¡ãŒã¿ã ãã®ãããªå€ãååšããªãå Žåã¯ãæåŸã®ãã©ã¡ãŒã¿ãè¿ãããŸãã
=> (ãŸãã¯çåœ)
â¯
=> (ãããŠåœåœ)
Ã
=> (ããã³åœ 1 çåœ)
1
泚æïŒ
or æåã®çã®å€ãæ€åºããããšããã«ããã©ã¡ãŒã¿ãŒã®è©äŸ¡ãã·ã§ãŒãããŠåæ¢ããŸãã
ééããã
=> (ãŸã㯠True ("hello" ãåºå))
â¯
å°å·
å°å· ç»é¢äžã«åºåããããã«äœ¿çšãããŸãã 䜿çšäŸ:
(ãHello world!ããå°å·)
泚æïŒ
å°å· åžžã«æ»ããŸã ãªã.
æºåŒçš
æºåŒçš ãã©ãŒã ãåŒçšã§ããã ãã§ãªããåŒãéžæçã«è©äŸ¡ããããšãã§ããŸãã
å ã®åŒ æºåŒçš ã䜿çšããŠéžæçã«è©äŸ¡ã§ããŸã åŒçšçµãã (~ïŒã ã¶
è©äŸ¡ããããã©ãŒã ã¯ã次ã䜿çšããŠæ¥åããããšãã§ããŸãã åŒçšç¬Šãå€ããŠã¹ãã©ã€ã¹ãã (~@ïŒã æºåŒçšãå¯èœã§ã
éåŒçšç¬Šã䜿çšããŠèšè¿°ãããŸã (`ïŒã·ã³ãã«ã
;; `qux' ãå€ãæã€å€æ°ã«ããŸã (bar baz)
`(ãµã~ã¯ã¯ã¹)
; '(foo (bar baz)) ãšåç
`(foo ~@qux)
; '(foo bar baz) ãšåç
ç
ç æž¡ããããã©ãŒã ãè©äŸ¡ããã«è¿ããŸãã ç ãããã¯ã
ã¢ãã¹ãããã£ãŒ ('ïŒã·ã³ãã«ã
=> (setv x '(print "Hello World"))
; å€æ° x ã¯åŒã«èšå®ãããŠããŸãããè©äŸ¡ãããŠããŸãã
=> Ã
(u'print' u'Hello World')
=> (è©äŸ¡ x)
ããã«ã¡ã¯äžç
å¿ èŠãšãã
å¿ èŠãšãã ç¹å®ã®ã¢ãžã¥ãŒã«ãããã¯ããã€ã³ããŒãããããã«äœ¿çšãããŸãã å°ãªããšã XNUMX ã€ã®ãã©ã¡ãŒã¿ãå¿ èŠã§ã
ã©ã®ãã¯ããã€ã³ããŒãããå¿ èŠãããã¢ãžã¥ãŒã«ãæå®ããŸãã è€æ°ã®ã¢ãžã¥ãŒã«ãã€ã³ããŒãå¯èœ
ã·ã³ã°ã«ã§ å¿ èŠãšãã.
次ã®äŸã§ã¯ããã¯ããã€ã³ããŒãããŸãã ã¢ãžã¥ãŒã«1 & ã¢ãžã¥ãŒã«2:
(ã¢ãžã¥ãŒã«-1 ã¢ãžã¥ãŒã«-2 ãå¿ èŠ)
æ®ã / cdr
æ®ã & cdr æåã®èŠçŽ ãªãã§åŒæ°ãšããŠæž¡ãããã³ã¬ã¯ã·ã§ã³ãè¿ããŸãã
=> (æ®ã(ç¯å²10))
[1ã2ã3ã4ã5ã6ã7ã8ã9]
ã»ããã³ã³ã
ã»ããã³ã³ã ã»ãããäœæããããã«äœ¿çšãããŸãã XNUMX ã€ãŸã㯠XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸãã æåã®ãã©ã¡ãŒã¿ã¯
XNUMX çªç®ã¯æ»ãå€ãå¶åŸ¡ããããã«äœ¿çšãããXNUMX çªç®ã¯é ç®ããé ç®ãéžæããããã«äœ¿çšãããŸãã
é åºã XNUMX çªç®ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã¯ã次ã®é ç®ã®äžéšããã£ã«ã¿ãªã³ã°ããããã«äœ¿çšã§ããŸãã
æ¡ä»¶åŒã«åºã¥ãã·ãŒã±ã³ã¹ã
=> (setv ããŒã¿ [1 2 3 4 5 2 3 4 5 3 4 5])
=> (set-comp x [x ããŒã¿] (å¥æ°? x))
{1ã3ã5}
ã¹ã©ã€ã¹
ã¹ã©ã€ã¹ ãªã¹ãã®ãµãã»ãããååŸããããããæ°ãããªã¹ããäœæããããã«äœ¿çšã§ããŸãã ãã©ãŒã
ã¹ã©ã€ã¹ãããªã¹ããæå®ãããã©ã¡ãŒã¿ãå°ãªããšã XNUMX ã€åãåããŸãã XNUMX ã€ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãæå®ã§ããŸãã
ãµãã»ããã®éå§äœçœ®ãšçµäºäœçœ®ãäžããããã«äœ¿çšãããŸãã ããããäŸçµŠãããŠããªãå Žåã
ã®ããã©ã«ãå€ ãªã 代ããã«äœ¿çšãããŸãã XNUMX çªç®ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã¯æ¬¡ã®ç®çã§äœ¿çšãããŸãã
èŠçŽ éã®ã¹ããããå¶åŸ¡ããŸãã
ã¹ã©ã€ã¹ Python ã®å¯Ÿå¿ç©ãšåãã«ãŒã«ã«åŸããŸãã è² ã®ã€ã³ããã¯ã¹ãã«ãŠã³ããããŸã
ãªã¹ãã®æåŸããå§ããŸãã 䜿çšäŸ:
=> (def ã³ã¬ã¯ã·ã§ã³ (ç¯å² 10))
=> (ã¹ã©ã€ã¹ã³ã¬ã¯ã·ã§ã³)
[0ã1ã2ã3ã4ã5ã6ã7ã8ã9]
=> (ã¹ã©ã€ã¹ã³ã¬ã¯ã·ã§ã³ 5)
[5ã6ã7ã8ã9]
=> (ã¹ã©ã€ã¹ã³ã¬ã¯ã·ã§ã³ 2 8)
[2ã3ã4ã5ã6ã7]
=> (ã¹ã©ã€ã¹ã³ã¬ã¯ã·ã§ã³ 2 8 2)
[2ã4ã6]
=> (ã¹ã©ã€ã¹ã³ã¬ã¯ã·ã§ã³ -4 -2)
[6ã7]
æãã / äžãã
ã æãã or äžãã ãã©ãŒã ã䜿çšããŠã äŸå€ å®è¡æã 䜿çšäŸ:
ïŒæããïŒ
; æåŸã®äŸå€ãåçºçãããŸã
(IOError ãã¹ããŒ)
; IOError ãã¹ããŒãã
(ã¹ã㌠(IOError "foobar"))
; IOError("foobar") ãã¹ããŒãã
æãã åäžã®åŒæ° ( äŸå€ ã¯ã©ã¹ãŸãã¯ã€ã³ã¹ã¿ã³ã¹)ããŸãã¯åŒæ°ããªãå Žå
æåŸããªã¬ã€ãºãã äŸå€.
è©ŠããŸã
ã è©ŠããŸã ãã©ãŒã ã¯éå§ããããã«äœ¿çšãããŸã è©ŠããŸã / ãã£ãã ãããã¯ã ãã©ãŒã ã¯æ¬¡ã®ããã«äœ¿çšãããŸãã
(ãã£ãŠã¿ãŠ
(ãšã©ãŒãçºçããããé¢æ°)
(catch [e ZeroDivisionError] (print "ãŒãé€ç®"))
(else (ããšã©ãŒãªãããåºå))
(æåŸã« (ããã¹ãŠå®äºããšåºå)))
è©ŠããŸã å°ãªããšãXNUMXã€å«ãŸããŠããå¿ èŠããããŸã ãã£ãã ãããã¯ã§ããããªãã·ã§ã³ã§ ã»ãã« or æåŸã«
ãããã¯ã ã®å®è¡äžã«äžèŽãã catch ãããã¯ã§ãšã©ãŒãçºçããå Žå
ãšã©ãŒãçºçããããé¢æ°ããã® ãã£ãã ãããã¯ãå®è¡ãããŸãã ãšã©ãŒãçºçããªãå Žåã ã»ãã«
ãããã¯ãå®è¡ãããŸãã ã® æåŸã« ãããã¯ã¯ãå®è¡ããããã©ããã«é¢ä¿ãªããæåŸã«å®è¡ãããŸãã
ãšã©ãŒãçºçããŸããã
ãªãéãã
ã ãªãéãã ãã¯ãã¯ã if æå®ããããã©ããããã§ãã¯ããã¹ããŒãã¡ã³ã
æ¡ä»¶ä»ãã§ã Ãã ãã®ãã¯ãã®å±éã以äžã«ç€ºããŸãã
(æ¡ä»¶æãé€ã)
(æ¡ä»¶ä»ãã®å Žå
ãªã
(do ã¹ããŒãã¡ã³ã))
åŒçšçµãã
æºåŒçšç¬Šã§å²ãŸãã圢åŒå ã§ã¯ã åŒçšçµãã ã·ã³ãã«ã®è©äŸ¡ã匷å¶ããŸãã åŒçšçµãã ãšã€ãªã¢ã¹ã¯
ãã«ã (~ïŒã·ã³ãã«ã
(ããã©ã«ãåã¯ãæ±æã)
(quasiquote (= name (unquote name)))
;=> (u'=' u'name' u'æ±ã£ã')
`(= åå ~åå)
;=> (u'=' u'name' u'æ±ã£ã')
åŒçšç¬Šãå€ããŠã¹ãã©ã€ã¹ãã
åŒçšç¬Šãå€ããŠã¹ãã©ã€ã¹ãã ã®ããã«ãæºåŒçšç¬Šã§å²ãŸãã圢åŒå ã®ã·ã³ãã«ã®è©äŸ¡ã匷å¶ããŸãã
åŒçšçµãã. åŒçšç¬Šãå€ããŠã¹ãã©ã€ã¹ãã åŒçšç¬Šã§å²ãŸããŠããªãã·ã³ãã«ã«
å埩å¯èœãªå€ãå埩å¯èœãªå€ãæºåŒçšç¬Šã§å²ãŸãã圢åŒã«ãçµåãããŸãã åŒçšç¬Šãå€ããŠã¹ãã©ã€ã¹ãã is
å¥å ~@ ã·ã³ãã«ã
(def nums [1 2 3 4])
(quasiquote (+ (unquote-splice nums)))
;=> (u'+' 1L 2L 3L 4L)
`(+ ~@nums)
;=> (u'+' 1L 2L 3L 4L)
ãã€
ã〠ã«äŒŒãŠããŸã ãªãéãããã ããæå®ãããæ¡ä»¶ã次ã®å Žåã«ãã¹ãããããšãé€ããŸãã â¯ã ããã§ã¯ãªã
æã€ããšãå¯èœ ã»ãã« ã§ããã㯠ã〠倧ããã 以äžã«å±éã瀺ããŸãã
ãã¯ãã
(æ¡ä»¶æã®å Žå)
(if æ¡ä»¶ä»ã (do ã¹ããŒãã¡ã³ã))
while
while æ¡ä»¶ãæºããããéããXNUMX ã€ä»¥äžã®ãããã¯ãå®è¡ããããã«äœ¿çšãããŸãã 次ã®
äŸã§ã¯ããHello world!ããåºåãããŸãã ç¡éã«ç»é¢ã«è¡šç€ºãããŸã:
(True ã®å Žå (ãHello world!ããåºå))
ã
ã ã³ã³ããã¹ã ãããŒãžã£ãŒå ã§ãããã¯ã®å®è¡ãã©ããããããã«äœ¿çšãããŸãã ã³ã³ããã¹ã
ãã®åŸã管çè ã¯ããŒã«ã« ã·ã¹ãã ãã»ããã¢ããããå¶åŸ¡ãããæ¹æ³ã§ãããç Žæ£ã§ããŸãã ã®
å žåçãªäœ¿çšäŸ ã ãã¡ã€ã«ãåŠçãããšãã§ãã ã ã³ã³ããã¹ãã
åŒæ°ãæå®ãããã以äžã«ç€ºãããã«å®å šã«ç¡èŠããŸãã
([[arg (expr)]] ãããã¯ã䜿çš)
([[(expr)]] ãããã¯ãã)
([[arg (expr)] [(expr)]] ãããã¯ã䜿çš)
次ã®äŸã§ã¯ã NEWS ãã¡ã€ã«ãéãããã®å 容ãç»é¢ã«åºåããŸãã ã®
ãã¡ã€ã«ã¯åŠçåŸã«èªåçã«éããããŸãã
(with [[f (open "NEWS")]] (print (.read f)))
ãã³ã¬ãŒã¿ä»ã
ãã³ã¬ãŒã¿ä»ã é¢æ°ãå¥ã®é¢æ°ã§ã©ããããããã«äœ¿çšãããŸãã ãå®è¡ããé¢æ°
è£ é£Ÿã¯åäžã®å€ãã€ãŸãè£ é£Ÿãããé¢æ°ãåãå ¥ããæ°ããå€ãè¿ãå¿ èŠããããŸãã
æ©èœã ãã³ã¬ãŒã¿ä»ã å°ãªããšã XNUMX ã€ã®ãã©ã¡ãŒã¿ãåããŸã: å®è¡ããé¢æ°
è£ é£Ÿãšè£ 食ãããæ©èœã è€æ°ã®ãã³ã¬ãŒã¿é¢æ°ã䜿çšã§ããŸã
é©çšæžã¿; ãããã¯ãæãå€åŽããæãå åŽã«åãã£ãŠé çªã«é©çšãããŸãã æå
ãã³ã¬ãŒã¿ã¯æãå€åŽã®ãã³ã¬ãŒã¿ã«ãªããŸãã åŒæ°ãæã€ãã³ã¬ãŒã¿ã¯åã«åŒã³åºãããŸã
é¢æ°åŒã³åºãã®ãããªãã®ã
(ãã³ã¬ãŒã¿ä»ããã³ã¬ãŒã¿-楜ãã
(defn some-function [] ...)
(ãã³ã¬ãŒã¿ä»ã ãã³ã¬ãŒã¿1 ãã³ã¬ãŒã¿2 ...
(defn some-function [] ...)
(with-decorator (decorator arg) ..
(defn some-function [] ...)
次ã®äŸã§ã¯ã ãã³ã¬ãŒã¿ãŒæ ªåŒäŒç€Ÿ é¢æ°ãè£ é£Ÿããããã«äœ¿çšãããŸã æ·»å ãŸãã
XNUMX ã€ã®ãã©ã¡ãŒã¿ãåãåãã次ã®å€ã䜿çšããŠè£ 食ãããé¢æ°ãåŒã³åºãé¢æ°ã
1 ãã€å¢å ããŸãã æ·»å å€ 1 ããã³ 1 ã§åŒã³åºãããçµäº
çµæ㯠4 ã«ãªããŸã (1 + 1 + 1 + 1).
=> (defn inc-decorator [é¢æ°]
... (fn [å€-1 å€-2] (func (+ å€-1 1) (+ å€-2 1)))
=> (defn inc2-decorator [é¢æ°]
... (fn [å€-1 å€-2] (func (+ å€-1 2) (+ å€-2 2)))
=> (with-decorator inc-decorator (defn å ç® [ab] (+ ab)))
=> (è¿œå 1 1)
4
=> (with-decorator inc2-decorator inc-decorator
... (å®çŸ©å ç® [ab] (+ ab)))
=> (è¿œå 1 1)
8
ãšgensyms
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
ãšgensym ã®ã»ãããçæããããã«äœ¿çšãããŸã ã²ã³ã·ã ãã¯ãã§äœ¿çšããŸãã 次ã®ã³ãŒã:
(gensonyms [abc] ä»ã)
...ïŒ
次ã®ããã«å±éãããŸã:
([[a (gensym)
[b (gensym)
[c (gensym)]]
...ïŒ
é¢é£é ç® ALSOïŒ
ã»ã¯ã·ã§ã³ using-gensym
ç£åº
ç£åº XNUMX ã€ä»¥äžã®å€ãè¿ããžã§ãã¬ãŒã¿ãŒ ãªããžã§ã¯ããäœæããããã«äœ¿çšãããŸãã çºé»æ©
å埩å¯èœã§ãããããã«ãŒãããªã¹ãå å è¡šèšãªã©ã§äœ¿çšã§ããŸãã
æ§æããŸãã
é¢æ° ä¹±æ° ãžã§ãã¬ãŒã¿ãŒã䜿çšããŠç¡éçŽæ°ãçæããæ¹æ³ã瀺ããŸã
ç¡éã®ã¡ã¢ãªãæ¶è²»ããããšãªãã
=> (defn ä¹ç® [åºæ¬ä¿æ°]
... (for [[(, ããŒã¹ä¿æ°) (zip ããŒã¹ä¿æ°)]]
... (åé (* åºæ¬ä¿æ°))))
=> (ä¹ç® (ç¯å² 5) (ç¯å² 5))
=> (ãªã¹ã-æŒç®å€ [å€ (ä¹ç® (ç¯å² 10) (ç¯å² 10))])
[0ã1ã4ã9ã16ã25ã36ã49ã64ã81]
=> (ã©ã³ãã ã«ã€ã³ããŒã)
=> (å®çŸ© ä¹±æ° [äœ é«]
... (while True (yield (.randint ã©ã³ãã äœé«))))
=> (list-comp x [x (take 15 (random-numbers 1 50))])])
[7ã41ã6ã22ã32ã17ã5ã38ã18ã38ã17ã14ã23ã23ã19]
å©åããã
ããŒãžã§ã³ 0.9.13 ã®æ°æ©èœã
ãã€ãœã³ 3.3 ãã㊠UP ONLYïŒ
å©åããã ãµããžã§ãã¬ãŒã¿ãŒãåŒã³åºãããã«äœ¿çšãããŸãã ããã¯ãã³ã«ãŒãã³ã次ã®ããã«ãããå Žåã«äŸ¿å©ã§ãã
ããšãã°ã次ã®ãããªæŽŸæãªãã®ã䜿çšããå Žåããã®ããã»ã¹ãå¥ã®ã³ã«ãŒãã³ã«å§ä»»ã§ããŸãã
éåæ.
Hy åºæ¬
åºæ¬ æ©èœ
æåŸã«
䜿çšæ³ïŒ (ã§ãæåŸã« ã³ã«ïŒ
æåŸã®é ç®ãé€ããã¹ãŠã®é ç®ã®ã€ãã¬ãŒã¿ãè¿ããŸãã ã³ã«.
=> (ãªã¹ã (æåŸ (ç¯å² 10)))
[0ã1ã2ã3ã4ã5ã6ã7ã8]
=> (ãªã¹ã (æåŸ [1]))
[]
=> (ãªã¹ã (æåŸãŸã§ []))
[]
=> (itertools ãã€ã³ããŒã)
=> (ãªã¹ã (take 5 (butlast (itertools.count 10))))
[10ã11ã12ã13ã14]
ã³ã«ïŒ
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ ïŒã³ã«ïŒ x)
è¿å ⯠if x å埩å¯èœã§ãããæååã§ã¯ãããŸããã
=> (åé? [1 2 3 4])
â¯
=> (coll? {"a" 1 "b" 2})
â¯
=> (ã³ã¬? "abc")
Ã
çæ
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ (çæ a b)
car ãå«ãæ°ãã cons ã»ã«ãè¿ããŸã a ãšcdr b.
=> (setv a (cons 'hd 'tl))
=> (= 'hd (è» a))
â¯
=> (= 'tl (cdr a))
â¯
çæïŒ
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ ïŒçæïŒ ãµãŒïŒ
ãã©ããã確èªããŸã foo ã¯ã³ã³ã»ã«ã§ãã
=> (setv a (cons 'hd 'tl))
=> (çæ? a)
â¯
=> (çæ?ãªã)
Ã
=> (çæ? [1 2 3])
Ã
12æ
䜿çšæ³ïŒ (XNUMXæ x)
XNUMX ã€å°ããå€ãè¿ããŸã xã ã«çžåœ (- x 1)ã ã¬ã€ãº ã¿ã€ããšã©ãŒ if ïŒäŒå¡ç»é²ã¯ãæžã¿ã§ããããïŒ ïŒæ°åïŒ ããïŒïŒ.
=> (3æXNUMXæ¥)
2
=> (0æXNUMXæ¥)
-1
=> (12.3æXNUMXæ¥)
11.3
å解ãã
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ (å解ãã ããªãŒ ãªãã·ã§ã³(&ãªãã·ã§ã³) [ã³ãŒããžã§ã³ ééã]ïŒ
æå®ããã Hy ã® Python AST ããã³ãããŸãã ããªãŒ æšæºåºåã«ã ãã ã³ãŒãçæ is â¯ã é¢æ°
代ããã« Python ã³ãŒããåºåããŸãã
=> (éã¢ã»ã³ãã« '(print "Hello World!"))
ã¢ãžã¥ãŒã«(
æ¬æ=[
Expr(value=Call(func=Name(id='print'), args=[Str(s='Hello World!')], ããŒã¯ãŒã=[], starargs=None, kwargs=None))])
=> (éã¢ã»ã³ãã« '(print "Hello World!") true)
print('Hello World!')
空ïŒ
䜿çšæ³ïŒ ïŒç©ºã®ïŒ ã³ã«ïŒ
è¿å ⯠if ã³ã« 空ã§ãã ã«çžåœ (= 0 (ã¬ã³ éããŠãã ããïŒïŒ.
=> (空? [])
â¯
=> (空ã§ãã? "")
â¯
=> (空? (, 1 2))
Ã
æ¯ïŒ
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ ïŒæ¯ïŒ æé£ ã³ã«ïŒ
è¿å ⯠if (ãã¬ã x) ã¯è«ççã«çã§ã x in ã³ã«ãããã§ãªããã° Ãã æ»ã â¯
if ã³ã« 空ã§ãã
=> (æ¯?å¶æ°?[2 4 6])
â¯
=> (æ¯?å¶æ°?[1 3 5])
Ã
=> (æ¯?å¶æ°?[2 4 5])
Ã
=> (æ¯?åç? [])
â¯
æµ®ãïŒ
䜿çšæ³ïŒ ïŒæµ®ãïŒ x)
è¿å ⯠if x ãããŒãã§ãã
=> (æµ®åå°æ°ç¹? 3.2)
â¯
=> (æµ®åå°æ°ç¹? -2)
Ã
å¹³ïŒ
䜿çšæ³ïŒ ïŒå¹³ïŒ x)
è¿å ⯠if x ã¯åçã§ãã ã¬ã€ãº ã¿ã€ããšã©ãŒ if ïŒäŒå¡ç»é²ã¯ãæžã¿ã§ããããïŒ ïŒæ°åïŒ ããïŒïŒ.
=> (å¶æ°? 2)
â¯
=> (å¶æ°? 13)
Ã
=> (å¶æ°? 0)
â¯
ã¢ã€ãã³ãã£ãã£
䜿çšæ³ïŒ ïŒèº«å x)
é¢æ°ã«æå®ãããåŒæ°ãè¿ããŸãã
=> (ã¢ã€ãã³ãã£ã㣠4)
4
=> (ãªã¹ã (ããã ID [1 2 3 4]))
[1 2 3 4]
æ ªåŒäŒç€Ÿ
䜿çšæ³ïŒ (å«ã x)
ãã XNUMX ã€å€ãå€ãè¿ããŸã xã ã«çžåœ (+ x 1)ã ã¬ã€ãº ã¿ã€ããšã©ãŒ if ïŒäŒå¡ç»é²ã¯ãæžã¿ã§ããããïŒ ïŒæ°åïŒ ããïŒïŒ.
=> (3 ãå«ã)
4
=> (0 ãå«ã)
1
=> (12.3 ãå«ã)
13.3
ã€ã³ã¹ã¿ã³ã¹ïŒ
䜿çšæ³ïŒ ïŒå®äŸïŒ class x)
è¿å ⯠if x ã®ã€ã³ã¹ã¿ã³ã¹ã§ã class.
=> (ã€ã³ã¹ã¿ã³ã¹? float 1.0)
â¯
=> (ã€ã³ã¹ã¿ã³ã¹? int 7)
â¯
=> (ã€ã³ã¹ã¿ã³ã¹? str (str "foo"))
â¯
=> (defclass TestClass [ãªããžã§ã¯ã])
=> (setv inst (TestClass))
=> (ã€ã³ã¹ã¿ã³ã¹? TestClass inst)
â¯
æŽæ°ïŒ
䜿çšæ³ïŒ ïŒæŽæ°ïŒ x)
è¿å ⯠if x ã¯æŽæ°ã§ãã Python 2 ã®å Žåãããã¯æ¬¡ã®ããããã§ã intå or é·ãã Python 3 ã®å Žåã
ãã㯠intå.
=> (æŽæ°? 3)
â¯
=> (æŽæ°? -2.4)
Ã
éã空ãã
ããŒãžã§ã³ 0.10.1 ã®æ°æ©èœã
䜿çšæ³ïŒ ïŒéã空ãã seq1 seq2 ...ïŒ
åã·ãŒã±ã³ã¹ã®æåã®é ç®ã次㫠XNUMX çªç®ã®é ç®ãªã©ã®å埩å¯èœé ç®ãè¿ããŸãã
=> (ãªã¹ã (ã€ã³ã¿ãŒãªãŒã (ç¯å² 5) (ç¯å² 100 105)))
[0ã100ã1ã101ã2ã102ã3ã103ã4ã104]
=> (ãªã¹ã (ã€ã³ã¿ãŒãªãŒã (ç¯å² 1000000) "abc"))
[0ã'a'ã1ã'b'ã2ã'c']
ä»å ¥ãã
ããŒãžã§ã³ 0.10.1 ã®æ°æ©èœã
䜿çšæ³ïŒ (éã«æã é ç® ç¶ã)
é ç®ã§åºåãããã·ãŒã±ã³ã¹ã®èŠçŽ ã®å埩å¯èœå€ãè¿ããŸãã
=> (ãªã¹ã (ã!ããabcdããæã))
['ããããã']
=> (ãªã¹ã (-1 (ç¯å² 5) ãæ¿å ¥))
[0ã-1ã1ã-1ã2ã-1ã3ã-1ã4]
å埩å¯èœã§ããïŒ
䜿çšæ³ïŒ (å埩å¯èœ? x)
è¿å ⯠if x å埩å¯èœã§ãã å埩å¯èœãªãªããžã§ã¯ãã¯ã次ã®å Žåã«æ°ããå埩åãè¿ããŸãã (ã€ã¿ãŒ x) is
ãšåŒã°ããã ãšå¯Ÿæ¯ããŠãã ãã ã€ãã¬ãŒã¿?.
=> ;; æååã«å¯ŸããŠæ©èœããŸã
=> (å埩å¯èœ? (str "abcde"))
â¯
=> ;; ãªã¹ãã«å¯ŸããŠæ©èœããŸã
=> (å埩å¯èœ? [1 2 3 4 5])
â¯
=> ;; ã¿ãã«ã§åäœããŸã
=> (å埩å¯èœ? (, 1 2 3))
â¯
=> ;; èŸæžã§åäœããŸã
=> (å埩å¯èœ? {:a 1 :b 2 :c 3})
â¯
=> ;; ã€ãã¬ãŒã¿/ãžã§ãã¬ãŒã¿ã§åäœããŸã
=> (å埩å¯èœ? (3 åç¹°ãè¿ããŸã))
â¯
ã€ãã¬ãŒã¿?
䜿çšæ³ïŒ (å埩å? x)
è¿å ⯠if x ã€ãã¬ãŒã¿ã§ãã ã€ãã¬ãŒã¿ã¯ãããèªèº«ã
ã€ãã¬ãŒã¿ã®ãšã (ã€ã¿ãŒ x) ãšåŒã°ããŸãã ãšå¯Ÿæ¯ããŠãã ãã å埩å¯èœã§ããïŒ.
=> ;; ãªã¹ãã§ã¯æ©èœããŸãã
=> (å埩å? [1 2 3 4 5])
Ã
=> ;; ãã ãããªã¹ããã iter ãååŸã§ããŸã
=> (å埩å? (iter [1 2 3 4 5]))
â¯
=> ;; èŸæžã§ã¯æ©èœããŸãã
=> (å埩å? {:a 1 :b 2 :c 3})
Ã
=> ;; dictããã€ãã¬ãŒã¿ãäœæãã
=> (å埩å? (å埩å {:a 1 :b 2 :c 3}))
â¯
ãªã¹ã*
䜿çšæ³ïŒ ïŒãªã¹ã* ïŒäŒã¿ ãã£ãœïŒ
åŒæ°ãå«ãå ¥ãåã«ãªã£ã cons ã»ã«ã®ãã§ãŒã³ (ç¹ç·ã®ãªã¹ã) ãçæããŸãã ãã
åŒæ°ãªã¹ãã«ã¯èŠçŽ ã XNUMX ã€ãããªãã®ã§ããããè¿ããŸãã
=> (ãªã¹ã* 1 2 3 4)
(1 2 3 . 4)
=> (ãªã¹ã* 1 2 3 [4])
[1ã2ã3ã4]
=> (ãªã¹ã*1)
1
=> (çæ? (ãªã¹ã* 1 2 3 4))
â¯
ãã¯ãå±é
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ (ãã¯ãå±é 圢ïŒ
ã®å®å šãªãã¯ãå±éãè¿ããŸãã ãã©ãŒã .
=> (ãã¯ãå±é '(-> (ab) (xy)))
(u'x' (u'a' u'b') u'y')
=> (ãã¯ãå±é '(-> (ab) (-> (cd) (ef))))
(u'e' (u'c' (u'a' u'b') u'd') u'f')
ãã¯ããšãã¹ãã³ã-1
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ (ãã¯ããšãã¹ãã³ã-1 圢ïŒ
次ã®åäžã¹ãããã®ãã¯ãå±éãè¿ããŸãã ãã©ãŒã .
=> (macroexpand-1 '(-> (ab) (-> (cd) (ef))))
(u'_>' (u'a' u'b') (u'c' u'd') (u'e' u'f'))
ãšå䜵
ããŒãžã§ã³ 0.10.1 ã®æ°æ©èœã
䜿çšæ³ïŒ ïŒãšå䜵 f ïŒäŒã¿ å°å³ïŒ
æåã«çµåãããæ®ãã®ãããã§æ§æãããããããè¿ããŸãã ããŒãçºçããå Žå
è€æ°ã®ããããããå ŽåãåŸè ã®ãããã³ã° (å·Šããå³) ãçµåãããŸãã
åŒã³åºãã«ããçµæã®ãããã³ã° (f çµæã®å€ åŸè ã®ãŽã¡ã«).
=> (ããŒãžãŠã£ãº (fn [xy] (+ xy)) {"a" 10 "b" 20} {"a" 1 "c" 30})
{u'a': 11Lãu'c': 30Lãu'b': 20L}
åŠå®ã§ããïŒ
䜿çšæ³ïŒ ïŒããïŒ x)
è¿å ⯠if x ã¯ãŒãæªæºã§ãã ã¬ã€ãº ã¿ã€ããšã©ãŒ if ïŒäŒå¡ç»é²ã¯ãæžã¿ã§ããããïŒ ïŒæ°åïŒ ããïŒïŒ.
=> (åŠå®? -2)
â¯
=> (åŠå®? 3)
Ã
=> (åŠå®? 0)
Ã
ãŒãïŒ
䜿çšæ³ïŒ ïŒãªãïŒ x)
è¿å ⯠if x is ãŒã / ãªã.
=> (ãªã? ãªã)
â¯
=> (ãªã?ãªã)
â¯
=> (nil? 0)
Ã
=> (setf x nil)
=> (nil?x)
â¯
=> ;; list.append ã¯åžžã« None ãè¿ããŸã
=> (nil? (.append [1 2 3] 4))
â¯
ç¡ãïŒ
䜿çšæ³ïŒ ïŒãªãïŒ x)
è¿å ⯠if x is ãªã.
=> (ãªã? ãªã)
â¯
=> (ãªã? 0)
Ã
=> (setf x ãªã)
=> (ãªã?Ã)
â¯
=> ;; list.append ã¯åžžã« None ãè¿ããŸã
=> (ãªã? (.append [1 2 3] 4))
â¯
nçªç®ã®
䜿çšæ³ïŒ (nçªç® ã³ã« n ãªãã·ã§ã³(&ãªãã·ã§ã³) [ãã£ãã©ã«ã ãªã])
ãè¿ããŸã nã³ã¬ã¯ã·ã§ã³å ã® 0 çªç®ã®é ç®ãããã©ã«ãå€ãè¿ããŸãã ãŒãããã
ç¯å²å€ã§ãïŒå¥éæå®ããªãéãïŒã ã¬ã€ãº å€ãšã©ãŒ if n è² ã§ãã
=> (nçªç® [1 2 4 7] 1)
2
=> (nçªç® [1 2 4 7] 3)
7
=> (nil? (nth [1 2 4 7] 5))
â¯
=> (nth [1 2 4 7] 5 "ããã©ã«ã")
'ãã£ãã©ã«ã'
=> (nth (take 3 (drop 2 [1 2 3 4 5 6])) 2))
5
=> (nçªç® [1 2 4 7] -1)
ãã¬ãŒã¹ããã¯ïŒæåŸã®æåŸã®åŒã³åºãïŒïŒ
...
ValueError: islice() ã®ã€ã³ããã¯ã¹ã¯ None ãŸãã¯æŽæ°: 0 <= x <= sys.maxsize ã§ããå¿ èŠããããŸãã
æ°å€çãªïŒ
䜿çšæ³ïŒ ïŒæ°åïŒ x)
è¿å ⯠if x Python ã§å®çŸ©ãããŠããæ°å€ã§ãã æ°å.æ°å ãšã«æäŸãããŸãã
=> (æ°å€? -2)
â¯
=> (æ°å€? 3.2)
â¯
=> (æ°å€? "foo")
Ã
å¥æ°ïŒ
䜿çšæ³ïŒ ïŒå¥æ°ïŒ x)
è¿å ⯠if x å¥æ°ã§ãã ã¬ã€ãº ã¿ã€ããšã©ãŒ if ïŒäŒå¡ç»é²ã¯ãæžã¿ã§ããããïŒ ïŒæ°åïŒ ããïŒïŒ.
=> (å¥æ°? 13)
â¯
=> (å¥æ°? 2)
Ã
=> (å¥æ°? 0)
Ã
ããã§ããïŒ
䜿çšæ³ïŒ ïŒããã§ããïŒ x)
è¿å ⯠if x ã¯ãŒããã倧ããã§ãã ã¬ã€ãº ã¿ã€ããšã©ãŒ if ïŒäŒå¡ç»é²ã¯ãæžã¿ã§ããããïŒ ïŒæ°åïŒ ããïŒïŒ.
=> (äœçœ®? 3)
â¯
=> (äœçœ®? -2)
Ã
=> (äœçœ®? 0)
Ã
2çªç®ã®
䜿çšæ³ïŒ ïŒXNUMXçª ã³ã«ïŒ
ã® XNUMX çªç®ã®ã¡ã³ããŒãè¿ããŸã ã³ã«ã ã«çžåœ ïŒååŸãã ã³ã« 1).
=> (0 çªç®ã® [1 2 XNUMX])
1
äžéš
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
䜿çšæ³ïŒ ïŒããã€ã æé£ ã³ã«ïŒ
æåã®è«ççã«çã®å€ãè¿ããŸãã (ãã¬ã x) ããããã® x in ã³ã«ãããã§ãªããã° ãŒã.
è¿å ãŒã if ã³ã« 空ã§ãã
=> (äžéšã¯å¶æ°ã§ãã? [2 4 6])
â¯
=> (nil? (å¶æ°ããã? [1 3 5]))
â¯
=> (nil? (äœããã®ã¢ã€ãã³ãã£ã㣠[0 "" []]))
â¯
=> (äœããã®ã¢ã€ãã³ãã£ã㣠[0 "空ã§ãªãæåå" []])
'空ã§ãªãæåå'
=> (nil? (å Žåã«ãã£ãŠã¯? []))
â¯
ã¹ããªã³ã°ïŒ
䜿çšæ³ïŒ ïŒåŒŠïŒ x)
è¿å ⯠if x æååã§ãã
=> (æåå? "foo")
â¯
=> (æåå? -2)
Ã
ã·ã³ãã«ïŒ
䜿çšæ³ïŒ ïŒã·ã³ãã«ïŒ x)
è¿å ⯠if x ã¯èšå·ã§ãã
=> (ã·ã³ãã«? 'foo)
â¯
=> (èšå·? '[abc])
Ã
é¶ïŒ
䜿çšæ³ïŒ ïŒãŒãïŒ x)
è¿å ⯠if x ãŒãã§ãã
=> (ãŒã? 3)
Ã
=> (ãŒã? -2)
Ã
=> (ãŒã? 0)
â¯
ã·ãŒã±ã³ã¹ æ©èœ
ã·ãŒã±ã³ã¹é¢æ°ã¯ãæœåšçã«ç¡éã®ã·ãŒã±ã³ã¹ãäœæãããæäœãããã§ããŸãã
ã·ãŒã±ã³ã¹ããªã¹ããŸãã¯åæ§ã®ã³ã³ããå ã§å®å šã«å®çŸãããå¿ èŠããããŸãã 圌ãã¯ããã次ã®ããã«ããŠè¡ããŸã
Python ã€ãã¬ãŒã¿ãè¿ããŸãã
䜿çšæ¹æ³ã®äŸãšããŠãæ£æºç¡éãã£ããããæ°ãžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãã
ãããã®æ©èœã®äžéšã
(å®çŸ© fib []
(ã»ããTV a 0)
(ã»ãããã¬ã b 1)
(æ¬åœã§ãã
(åéa)
(setv (, ab) (, b (+ ab))))
泚æããŠãã ãã (ãã®é true ...ïŒ ã«ãŒãã ããã REPL ã§å®è¡ãããšã
=> (ãã£ã)
é¢æ°ãåŒã³åºããšã€ãã¬ãŒã¿ãè¿ãããã ãã§ãããããã䜿çšãããŸã§ã¯æ©èœããŸããã
ãã®ãããªããšãè©Šã¿ãããšã¯ãç¡éã«ãŒããå®è¡ããããŸã§å®è¡ãããããããå§ãã§ããŸããã
å©çšå¯èœãª RAM ããã¹ãŠæ¶è²»ãããããã®å Žåã¯åŒ·å¶çµäºãããŸã§æ¶è²»ããŸãã
=> (ãªã¹ã(fib))
[1] 91474 人ãæ»äº¡
æåã® 10 åã®ãã£ããããæ°ãååŸããã«ã¯ã次ã䜿çšããŸãã åãã ãäºæ¿ãã ãã åã ãžã§ãã¬ãŒã¿ãŒãè¿ããŸãã
ããã§ãããããªã¹ããäœæããŸãã
=> (ãªã¹ã (ãã€ã¯ 10 (fib)))
[0ã1ã1ã2ã3ã5ã8ã13ã21ã34]
ã€ã³ããã¯ã¹ 9 ã®ãã£ããããæ°ãååŸããã«ã¯ (0 ããéå§):
=> (nçªç®(fib) 9)
34
ãµã€ã¯ã«
䜿çšæ³ïŒ ïŒãµã€ã¯ã« ã³ã«ïŒ
coll ã®ã¡ã³ããŒã®ç¡éã€ãã¬ãŒã¿ãè¿ããŸãã
=> (ãªã¹ã (ãã€ã¯ 7 (ãµã€ã¯ã« [1 2 3])))
[1ã2ã3ã1ã2ã3ã1]
=> (ãªã¹ã (ãã€ã¯ 2 (ãµã€ã¯ã« [1 2 3])))
[1ã2]
æ確ãª
䜿çšæ³ïŒ ïŒæ確㪠ã³ã«ïŒ
äžæã®ã¡ã³ããŒã®ã¿ãå«ãã€ãã¬ãŒã¿ãè¿ããŸãã ã³ã«.
=> (ãªã¹ã (distinct [ 1 2 3 4 3 5 2 ]))
[1ã2ã3ã4ã5]
=> (ãªã¹ã (åå¥ã® []))
[]
=> (ãªã¹ã (distinct (iter [ 1 2 3 4 3 5 2 ])))
[1ã2ã3ã4ã5]
ãããã
䜿çšæ³ïŒ ïŒèœãšã n ã³ã«ïŒ
æåã®ã€ãã¬ãŒã¿ãã¹ãããããŠã€ãã¬ãŒã¿ãè¿ããŸãã n ã®ã¡ã³ã㌠ã³ã«ã ã¬ã€ãº å€ãšã©ãŒ if n is
è² ã
=> (ãªã¹ã (ãããã 2 [1 2 3 4 5]))
[3ã4ã5]
=> (ãªã¹ã (ãããã 4 [1 2 3 4 5]))
ã5]
=> (ãªã¹ã (ãããã 0 [1 2 3 4 5]))
[1ã2ã3ã4ã5]
=> (ãªã¹ã (ãããã 6 [1 2 3 4 5]))
[]
ããããã©ã¹ã
䜿çšæ³ïŒ (ããããã©ã¹ã n ã³ã«ïŒ
æåŸãé€ããã¹ãŠã®å埩åãè¿ããŸãã n ã®ã¢ã€ãã ã³ã«ã ã¬ã€ãº å€ãšã©ãŒ if n is
è² ã
=> (ãªã¹ã (æåŸã® 5 ããããã (ç¯å² 10 20)))
[10ã11ã12ã13ã14]
=> (ãªã¹ã (ãããã-æåŸã® 0 (ç¯å² 5)))
[0ã1ã2ã3ã4]
=> (ãªã¹ã (ãããã-æåŸã® 100 (ç¯å² 100)))
[]
=> (itertools ãã€ã³ããŒã)
=> (ãªã¹ã (take 5 (drop-last 100 (itertools.count 10))))
[10ã11ã12ã13ã14]
ããããããªãã
䜿çšæ³ïŒ (ããããããªãã æé£ ã³ã«ïŒ
ã®ã¡ã³ããŒãã¹ãããããŠã€ãã¬ãŒã¿ãè¿ããŸãã ã³ã« ãŸã§ æé£ is Ã.
=> (ãªã¹ã (å¶æ°ããããäž? [2 4 7 8 9]))
[7ã8ã9]
=> (list (drop-while numeric? [1 2 3 None "a"])))
[äœããªãããããŒ]
=> (ãªã¹ã (ããããäžã®äœçœ®? [2 4 7 8 9]))
[]
filter
䜿çšæ³ïŒ ïŒãã£ã«ã¿ãŒ æé£ ã³ã«ïŒ
å ã®ãã¹ãŠã®é ç®ã®ã€ãã¬ãŒã¿ãè¿ããŸãã ã³ã« è¿°èªãæž¡ããã® æé£.
åç § åé€ããŸã.
=> (ãªã¹ã (ãã£ã«ã¿ãŒäœçœ®? [1 2 3 -4 5 -7]))
[1ã2ã3ã5]
=> (ãªã¹ã (ãã£ã«ã¿å¶æ°? [1 2 3 -4 5 -7]))
[2ã-4]
å¹³ãã«ãã
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
䜿çšæ³ïŒ (å¹³ãã«ãã ã³ã«ïŒ
ãã¹ãŠã®é ç®ã®åäžã®ãªã¹ããè¿ããŸãã ã³ã«å«ãŸãããã¹ãŠã®ãªã¹ããå¹³åŠåããããšã«ãã£ãŠãããã³/ãŸãã¯
ã¿ãã«ã
=> (å¹³åŠå [1 2 [3 4] 5])
[1ã2ã3ã4ã5]
=> (å¹³åŠå ["foo" (, 1 2) [1 [2 3] 4] "bar"])
['foo', 1, 2, 1, 2, 3, 4, 'bar']
å埩ãã
䜿çšæ³ïŒ (å埩 fn x)
次ã®ã€ãã¬ãŒã¿ãè¿ããŸãã x, fn(x), fn(fn(x)), etc.
=> (ãªã¹ã (take 5 (iterate inc 5)))
[5ã6ã7ã8ã9]
=> (ãªã¹ã (take 5 (iterate (fn [x] (* xx)) 5)))
[5ã25ã625ã390625ã152587890625]
read
䜿çšæ³ïŒ ïŒèªã ãªãã·ã§ã³(&ãªãã·ã§ã³) [ãã¡ã€ã«ãã [eof])
次㮠Hy åŒãèªã¿åããŸãã ãã¡ã€ã«ãã (ããã©ã«ãã§ã¯ ã·ã¹ãã æšæºå ¥åïŒããååŸã§ããŸã
EOF ãšããŠåäžãã€ã (ããã©ã«ãã¯ç©ºã®æåå)ã ã¬ã€ãº EOFãšã©ãŒ if ãã¡ã€ã«ãã åã«çµãã
å®å šãªåŒã解æã§ããŸãã
=> (èªã)
(+2 2)
('+' 2 2)
=> (è©äŸ¡(èªã¿åã))
(+2 2)
4
=> (ã€ã³ããŒãIO)
=> (def ãããã¡ (io.StringIO "(+ 2 2)\n(- 2 1)"))
=> (eval (apply read [] {"from_file" ãããã¡}))
4
=> (eval (apply read [] {"from_file" ãããã¡}))
1
=> ; ãexample.hyãã«æ¬¡ã®å 容ãå«ãŸããŠãããšä»®å®ããŸãã
=> ; (ãããã«ã¡ã¯ããå°å·)
=> ; (ããã€ãã¬ã³ãº!ããšå°å·ããŠãã ãã)
=> (with [[f (open "example.hy")]]
... ïŒè©Šã
... (æ¬åœã§ãã
... (let [[exp (read f)]]
... ïŒãã
... (ãOHYãexpãå°å·)
... (è©äŸ¡åŒ))))
... (ãã£ãã [e EOFError]
... (ãEOF!ããå°å·))))
OHY (ãå°å·ããããã«ã¡ã¯ã)
ããã«ã¡ã¯
OHY (ãå°å·ãããã€ãã¬ã³ãº!ã)
ãã€ãã¬ã³ãºïŒ
çµäº!
åé€ããŸã
䜿çšæ³ïŒ ïŒåãé€ã æé£ ã³ã«ïŒ
ããã€ãã¬ãŒã¿ãè¿ããŸãã ã³ã« è¿°èªãæž¡ãèŠçŽ ã®å Žåã æé£ãåé€ãããŸããã
åç § filter .
=> (ãªã¹ã (å¥æ°ãåé€? [1 2 3 4 5 6 7]))
[2ã4ã6]
=> (ãªã¹ã (äœçœ®ãåé€ããŸãã? [1 2 3 4 5 6 7]))
[]
=> (ãªã¹ã (neg ãåé€ããŸãã? [1 2 3 4 5 6 7]))
[1ã2ã3ã4ã5ã6ã7]
ç¹°ãè¿ã
䜿çšæ³ïŒ ïŒç¹°ãè¿ã x)
次ã®å埩å (ç¡é) ãè¿ããŸãã x.
=> (ãªã¹ã (ãã€ã¯ 6 (ãsããç¹°ãè¿ã)))
[ããªããããªããããªããããªããããªããããªã]
ç¹°ãè¿ã
䜿çšæ³ïŒ (ç¹°ãè¿ã fnïŒ
åŒã³åºããŠã€ãã¬ãŒã¿ãè¿ããŸã fn ç¹°ãè¿ãã
=> (ã€ã³ããŒã [ã©ã³ãã [randint]])
=> (list (take 5 (ç¹°ãè¿ã (fn [] (randint 0 10)))))
[6ã2ã0ã6ã7]
åã
䜿çšæ³ïŒ ïŒåã£ã n ã³ã«ïŒ
æåã®èŠçŽ ãå«ãå埩åãè¿ããŸãã n ã®ã¡ã³ã㌠ã³ã«ã ã¬ã€ãº å€ãšã©ãŒ if n is
è² ã
=> (ãªã¹ã (ãã€ã¯ 3 [1 2 3 4 5]))
[1ã2ã3]
=> (ãªã¹ã (ãã€ã¯ 4 (ãsããç¹°ãè¿ã)))
[ããªããããªããããªããããªã]
=> (ãªã¹ã (ãã€ã¯ 0 (ãsããç¹°ãè¿ã)))
[]
åã
䜿çšæ³ïŒ (nçªç®ãåã n ã³ã«ïŒ
ãã¹ãŠãå«ãå埩åãè¿ããŸãã n- çªç®ã®ã¡ã³ã㌠ã³ã«.
=> (ãªã¹ã (take-nth 2 [1 2 3 4 5 6 7]))
[1ã3ã5ã7]
=> (ãªã¹ã (take-nth 3 [1 2 3 4 5 6 7]))
[1ã4ã7]
=> (ãªã¹ã (take-nth 4 [1 2 3 4 5 6 7]))
[1ã5]
=> (ãªã¹ã (take-nth 10 [1 2 3 4 5 6 7]))
ã1]
ãã°ããã®é
䜿çšæ³ïŒ (ãã°ããã®é æé£ ã³ã«ïŒ
ããã€ãã¬ãŒã¿ãè¿ããŸãã ã³ã« éã æé£ åç â¯.
=> (ãªã¹ã (ãã€ã¯äžã®äœçœ®? [ 1 2 3 -4 5]))
[1ã2ã3]
=> (ãªã¹ã (take-while neg? [ -4 -3 1 2 5]))
[-4ã-3]
=> (ãªã¹ã (take-while neg? [ 1 2 3 -4 5]))
[]
ãžãããŠã£ãº
ããŒãžã§ã³ 0.9.13 ã®æ°æ©èœã
䜿çšæ³ïŒ (ãžãããŒä»ã fn ã³ã« ...ïŒ
ã«çžåœ ZIPã§ãããã¿ãã«ãäœæãã代ããã«è€æ°åŒæ°é¢æ°ã䜿çšããŸãã ãã
ãžãããŠã£ãº N åã®ã³ã¬ã¯ã·ã§ã³ã§åŒã³åºããããšã fn N åã®åŒæ°ãåãå ¥ããå¿ èŠããããŸãã
=> (ã€ã³ããŒãæŒç®å)
=> (ãªã¹ã (zipwith æŒç®å.add [1 2 3] [4 5 6]))
[5ã7ã9]
ãªãŒã㌠ãã¯ã
Reader ãã¯ãã¯ãLisp ã«æ§æããã®å Žã§å€æŽããã³å€æŽããæ©èœãäžããŸãã 欲ãããªãã§ããã
ããŒã©ã³ãèªè¡šèšïŒ ãªãŒã㌠ãã¯ãã䜿çšãããšããããç°¡åã«è¡ãããšãã§ããŸãã Clojure ã®ãããªæ¹æ³ãå¿ èŠã§ã
æ£èŠè¡šçŸ? Reader ãã¯ãã§ããããç°¡åã«è¡ãããšãã§ããŸãã
æ§æ
=> (defreader ^ [expr] (print expr))
=> #^(1 2 3 4)
ïŒ1 2 3 4ïŒ
=> #^ãããã«ã¡ã¯ã
"ããã«ã¡ã¯"
=> #^1+2+3+4+3+2
1+2+3+4+3+2
Hy ã«ã¯ã¿ãã«ã®ãªãã©ã«ããããŸããã å«ãã ãšèšã£ãŠã¿ãŸããã (, ...ïŒ ãããŠäœãä»ã®ãã®ã欲ããã§ãã ãã
ããã¯ãªãŒããŒãã¯ããããŸã解決ã§ããåé¡ã§ãã
=> (defreader t [expr] `(, ~@expr))
=> #t(1 2 3)
ïŒ1ã2ã3ïŒ
Clojure ã®ããã«æ£èŠè¡šçŸã®ãªãã©ã«ã䜿çšããããšãã§ããŸãã
=> (ã€ã³ããŒãå)
=> (defreader r [expr] `(re.compile ~expr))
=> #r".*"
<_sre.SRE_Pattern ãªããžã§ã¯ã (0xcv7713ph15#)>
補åã®å°å ¥
ææè ãªãŒã㌠ãã¯ãã®ã·ã³ãã«åãšã㊠XNUMX æåãåãåããŸãã ããäœã§ã
ãšã©ãŒãè¿ãããŸãã å®è£ ã«é¢ããŠã¯ã ææè ã§èŠãããã©ã ãã«å±éããŸãã
ãã³ã¬ãŒã¿ãŒã ãã®ãã³ã¬ãŒã¿ãŒã¯ãã©ã ãããã®ã¢ãžã¥ãŒã«åãšãšãã«èŸæžã«ä¿åããŸãã
ã·ã³ãã«ã
=> (defreader ^ [expr] (print expr))
;=> (with_decorator (hy.macros.reader ^) (fn [expr] (print expr)))
# ã«æ¡å€§ããŸã (dispatch_reader_macro ...ïŒ ã·ã³ãã«ãšåŒãæž¡ãããå Žæ
æ£ããæ©èœã
=> #^()
;=> (dispatch_reader_macro ^ ())
=> #^ãããã«ã¡ã¯ã
"ããã«ã¡ã¯"
èŠåïŒ
Hy ã®ã¬ã¯ãµãŒãšããŒãµãŒã®å¶éã«ããããªãŒã㌠ãã¯ãã¯å®çŸ©ããããã¯ããåå®çŸ©ã§ããŸãã
ã®ãããªæ§æ ()[]{}ã ãã®åé¡ã¯å°æ¥çã«è§£æ±ºãããå¯èœæ§ãé«ããªããŸãã
å éš Hy ããã¥ã¡ã³ããŒã·ã§ã³
泚æïŒ
ãããã®ãããã¯äž»ã« Hy èªäœããããã³ã°ãã人ã«ãšã£ãŠåœ¹ç«ã¡ãŸããã次ã®ç®çã«ã䜿çšã§ããŸãã
ãã¯ãããã°ã©ãã³ã°ãããã«æ·±ãæãäžãã人ã
Hy Models
æŠèŠ ããž Hy Models
Hy ã¢ãã«ã¯éåžžã® Python ãªããžã§ã¯ãã®äžã«ããéåžžã«èãå±€ã§ãããHy ãœãŒã¹ãè¡šããŸã
ããŒã¿ãšããŠã®ã³ãŒãã ã¢ãã«ã¯ãœãŒã¹ã®äœçœ®æ å ±ã®ã¿ãè¿œå ããããã€ãã®ã¡ãœãããè¿œå ããŸãã
Hy ãœãŒã¹ ã³ãŒãã®ã¯ãªãŒã³ãªæäœ (ãã¯ããªã©) ããµããŒãããŸãã ãããéæããããã«
ç®æšãšããŠãHy ã¢ãã«ã¯åºæ¬ Python ã¯ã©ã¹ã®ããã¯ã¹ã€ã³ã§ããã HyObject.
HyObject
hy.models.HyObject Hy ã¢ãã«ã®åºæ¬ã¯ã©ã¹ã§ãã å®è£ ããã¡ãœãã㯠XNUMX ã€ã ãã§ãã replace,
ããã¯ãçŸåšã®ãªããžã§ã¯ãã®ãœãŒã¹äœçœ®ãåŒæ°ãšããŠæž¡ããããã®ã«çœ®ãæããŸãã
ããã«ãããå€æŽãããåŒã®å ã®äœçœ®ã远跡ã§ããããã«ãªããŸãã
ãã¯ãã¯ãã³ã³ãã€ã©å ã§ãã£ãŠããçŽç²ãª hy ãã¯ãå ã§ãã£ãŠãã
HyObject Hy ã¢ãã«ãã€ã³ã¹ã¿ã³ã¹åããããã«çŽæ¥äœ¿çšããããšãç®çãšãããã®ã§ã¯ãªããããã¯ã¹ã€ã³ãšããŠã®ã¿äœ¿çšããããšãç®çãšããŠããŸãã
ä»ã®ã¯ã©ã¹ã®å Žåã
Models
æ¬åŒ§ã§å²ãŸãããªã¹ããšæ¬åŒ§ã§å²ãŸãããªã¹ãã¯ãHy ããŒãµãŒã«ãã£ãŠè€åã¢ãã«ãšããŠè§£æãããŸãã
ãã€ãªã¹ã
hy.models.list.HyList ãå埩å¯èœãªãHy ã¢ãã«ã®åºæ¬ã¯ã©ã¹ã§ãã ãã®åºæ¬çãªäœ¿ãæ¹ã¯ã
æ¬åŒ§ã§å²ãŸãããã®ãè¡šã [] ãªã¹ãããããã¬ãã«ã®åŒãšããŠäœ¿çšãããšã次ã®ããã«å€æãããŸãã
ã³ã³ãã€ã«æ®µéã§ã® Python ãªã¹ã ãªãã©ã«ã
HyList ãå¥ã®å埩å¯èœãªãªããžã§ã¯ãã«è¿œå ãããšãå·ŠåŽã®ãªããžã§ã¯ãã®ã¯ã©ã¹ãåå©çšãããŸãã
ããã¯ããã¯ãå 㧠Hy ãªããžã§ã¯ããé£çµããå Žåãªã©ã«äŸ¿å©ãªåäœã§ãã
ãã€åŒ
hy.models.expression.HyExpression åãç¶ã ãã€ãªã¹ã æ¬åŒ§ä»ãã® () è¡šçŸã ã®
ãããã®åŒã®ã³ã³ãã€ã«çµæã¯ããªã¹ãã®æåã®èŠçŽ ã«ãã£ãŠç°ãªããŸãã
ã³ã³ãã€ã©ã¯ãã³ã³ãã€ã©ã®ç¹æ®åœ¢åŒããŠãŒã¶ãŒå®çŸ©ãã¯ããããã³ã³ã³ãã€ã©éã§åŒããã£ã¹ãããããŸãã
éåžžã® Python é¢æ°åŒã³åºãã
ãã€ãã£ã¯ã
hy.models.dict.HyDict åãç¶ã ãã€ãªã¹ã äžæ¬åŒ§ã®å Žå {} ã³ã³ãã€ã«ããåŒ
Python èŸæžãªãã©ã«ãŸã§ã
èŸæžã®ä»£ããã«ãªã¹ããåºåºã¯ã©ã¹ãšããŠäœ¿çšããæ±ºå® ãã€ãã£ã¯ã ããç°¡åã«ã§ããŸã
ãã¯ãã§ã®èŸæžã®æäœãè€ååŒãèš±å¯ãããšããè¿œå ã®å©ç¹
dict ããŒãšã㊠(ããšãã°ã ãã€åŒ Python ã¯ã©ã¹ã¯ããã·ã¥å¯èœã§ã¯ãããŸãã)ã
ã¢ããã㯠Models
å ¥åã¹ããªãŒã ã§ã¯ãæååã® Python è¡šèšæ³ã«åŸã£ãŠäºéåŒçšç¬Šã§å²ãŸããæååãã
åäžã®ããŒã¯ã³ãšããŠè§£æããã ãã€ã¹ããªã³ã°.
ã¹ããŒã¹ãæ¬åŒ§ãåŒçšç¬ŠãäºéåŒçšç¬Šãé€ããé£ç¶ããæåå
ãšã³ã¡ã³ãã¯èå¥åãšããŠè§£æãããŸãã
èå¥åã¯ã解æãã§ãŒãºäžã«æ¬¡ã®é åºã§ã¢ããã㯠ã¢ãã«ã«è§£æ±ºãããŸãã
· HyInteger
· ãã€ãããŒã
· ãã€ã³ã³ãã¬ãã¯ã¹ (ååã裞ã§ãªãå Žå j)
· ãã€ããŒã¯ãŒã (ååã次ã§å§ãŸãå Žå :)
· ãã€ã·ã³ãã«
ãã€ã¹ããªã³ã°
hy.models.string.HyString æååãšåçã® Hy ã¢ãã«ã®åºæ¬ã¯ã©ã¹ã§ãã ãŸã
äºéåŒçšç¬Šã§å²ãŸããæååãªãã©ã«ãè¡šããŸãã ""ãUnicodeæååã«ã³ã³ãã€ã«ãããŸãã
Python ã®ãªãã©ã«ã ãã€ã¹ããªã³ã°ã¹ Python 2 ã§ã¯ Unicode ãªããžã§ã¯ããç¶æ¿ããPython XNUMX ã§ã¯æååãªããžã§ã¯ããç¶æ¿ããŸãã
Python 3 (ãããã£ãŠãšã³ã³ãŒãã«äŸåããŸãã)ã
ãã€ã¹ããªã³ã° ããŒã¹ã®ã¢ãã«ã¯äžå€ã§ãã
Hy ãªãã©ã«æååã¯è€æ°è¡ã«ãŸãããããšãã§ããããŒãµãŒã«ãã£ãŠ XNUMX ã€ã®æååãšããŠã¿ãªãããŸãã
Unicode æååã® Python ãšã¹ã±ãŒããèæ ®ãããŠãããã
æ°å€ã® Models
hy.models.integer.HyInteger æŽæ°ãªãã©ã«ãè¡šããŸã ( é·ã Python 2 ã§å ¥åããŸãã
& intå Python 3 äž)ã
hy.models.float.HyFloat æµ®åå°æ°ç¹ãªãã©ã«ãè¡šããŸãã
hy.models.complex.HyComplex è€éãªãªãã©ã«ãè¡šããŸãã
æ°å€ã¢ãã«ã¯ã察å¿ãã Python ã«ãŒãã³ãšæå¹ãªæ°å€ Python ã䜿çšããŠè§£æãããŸãã
ãªãã©ã«ã¯å¯Ÿå¿ãã Hy ã«å€æãããŸãã
ãã€ã·ã³ãã«
hy.models.symbol.HySymbol Hy èšèªã§ã·ã³ãã«ãè¡šçŸããããã«äœ¿çšãããã¢ãã«ã§ãã ãã
åãç¶ã ãã€ã¹ããªã³ã°.
ãã€ã·ã³ãã« Python ã®çžäºéçšæ§ãé«ããããã«ããªããžã§ã¯ãã¯è§£æãã§ãŒãºã§ç Žå£ãããŸãã
ã»ã¢ã¹ã¿ãªã¹ã¯ã§å²ãŸããèšå·ïŒ*) ã¯å€§æåã«å€æãããŸãã
· ããã·ã¥ (-) ã¯ã¢ã³ããŒã¹ã³ã¢ (_);
· æ«å°Ÿã«çå笊ã XNUMX 〠(?) ãå é ã«å€ãããŸã ã¯_.
泚æ: ãã³ã°ãªã³ã°ã¯è§£æãã§ãŒãºäžã«è¡ãããããã次ã®ããšãå¯èœã§ãã
Hy ãœãŒã¹ ã³ãŒãã§ã¯çæã§ããªã HySymbol ãããã°ã©ã ã§çæããŸãã ãããª
ãã®ã¡ã«ããºã ã¯ãgensym ã«ãã£ãŠãã€ã³ã¿ãŒã³ãããŠããªããã·ã³ãã«ãçæããããã«äœ¿çšãããŸãã
ãã€ããŒã¯ãŒã
hy.models.keyword.HyKeyword Hyã®ããŒã¯ãŒããè¡šããŸãã ããŒã¯ãŒãã¯ãã§å§ãŸãèšå·ã§ãã
a :ã ã¯ã©ã¹ã¯ç¶æ¿ããŸã ãã€ã¹ããªã³ã°.
åºå¥ããããã« ãã€ããŒã¯ãŒã ãã HySymbolsãïŒéèªçºçïŒå¯èœæ§ãªââã
ã¯ã©ãã·ã¥ãç§çš Unicode æå ã\uFDD0ã ããŒã¯ãŒããªãã©ã«ã®å é ã«ä»å ãããŸã
ä¿ç®¡åã
ãã¡ãªãã 现è
hy.models.cons.HyCons 㯠Python ãã¬ã³ããªãŒã®è¡šçŸã§ã çæ 现èã ã³ã³ã¹ã»ã«ã¯ã
Scheme ã Common ãªã©ã®ãéåžžã®ãLISP ããªã¢ã³ãã®æ©èœãæš¡å£ããã®ã«ç¹ã«äŸ¿å©ã§ã
è足ããã®çºé³ã
ã³ã³ã¹ ã»ã«ã¯ 2 é ç®ã®ãªããžã§ã¯ãã§ããã èªåè» ïŒé ïŒãš cdr ïŒãã£ãœïŒã äžéšã®Lispã§ã¯
ããªã¢ã³ãã§ã¯ãã³ã³ã¹ ã»ã«ãåºæ¬çãªæ§æèŠçŽ ã§ãããS åŒã¯å®éã«ã¯
ã³ã³ã¹ã»ã«ã®ãªã³ã¯ããããªã¹ããšããŠè¡šãããŸãã ãã€ãã®ããã«ãHyã§ã¯ããã§ã¯ãããŸãã
åŒã¯ Python ãªã¹ãã§ã©ãããããŠæ§æãããŸãã ãã€åŒã ãããã ãã€ã³ã³ãº
ãã®ããã«ããéåžžã®ãLisp ããªã¢ã³ãã®åäœãæš¡å£ããŸãã
· (çæ äœã ãªã) is (HyExpression [äœã]ïŒ
· (çæ äœã ããã€ãã®ãªã¹ã) is ïŒïŒã¿ã€ã ããã€ãã®ãªã¹ã) (+ [äœã] ããã€ãã®ãªã¹ã)) ïŒif
ããã€ãã®ãªã¹ã ããç¶æ¿ ãªã¹ã).
· ïŒååŸãã (çæ a b) 0) is a
· ïŒã¹ã©ã€ã¹ (çæ a b) 1) is b
Hy ã¯ãããä»ããªã¹ãæ§æããµããŒãããŠããŸãã '(a . b) æ段 (çæ 'a 'b) & '(a b . c) æ段
(çæ 'a (çæ 'b 'c))ã ã³ã³ãã€ã©ããããã¬ãã«ã§ cons ã»ã«ã«ééãããšã
ã³ã³ãã€ã«ãšã©ãŒã
ãã€ã³ã³ãº æž¡ãããåŒæ° (car ãš cdr) ã Hy åã§ã©ããããæäœã容æã«ããŸãã
ãã¯ãã³ã³ããã¹ãã® cons ã»ã«ã
Hy å éš çè«
æŠèŠ
Hy ã®å éšã¯ Python ãã€ãã³ãŒãã®ããã³ããšã³ããšããŠæ©èœãããããHy èªäœã¯
Python ãã€ãã³ãŒãã«ã³ã³ãã€ã«ãããæªå€æŽã® Python ã©ã³ã¿ã€ã 㧠Hy ã³ãŒããå®è¡ã§ããããã«ãªããŸãã
æ°ã¥ããã«ã
ãããè¡ãæ¹æ³ã¯ãHy ãå éš Python AST ããŒã¿æ§é ã«å€æããããšã§ãã
Python æšæºã®ã¢ãžã¥ãŒã«ã䜿çšããŠããã® AST ã Python ãã€ãã³ãŒãã«æ§ç¯ããŸã
ããã«ãããPython å éšã®ãã¹ãŠã®äœæ¥ããã¹ãŠã®ã©ã€ãã©ãªã§è€è£œããå¿ èŠããªããªããŸãã
åäžã® Python ãªãªãŒã¹ã
Hy 㯠XNUMX ã€ã®æ®µéã§æ©èœããŸãã 次ã®ã»ã¯ã·ã§ã³ã§ã¯ããœãŒã¹ãããœãŒã¹ãŸã§ã® Hy ã®åã¹ãããã«ã€ããŠèª¬æããŸãã
ã©ã³ã¿ã€ã ã
ã¹ããã 1 & 2: ããŒã¯ã³å & 解æ
Hy ãã³ã³ãã€ã«ããæåã®æ®µéã¯ããœãŒã¹ãåŠçã§ããããŒã¯ã³ã«å€æããããšã§ãã ç§ãã¡ã¯
rply ãšãããããžã§ã¯ãã䜿çšããŸããããã¯ããµãã»ããã§æžãããéåžžã«åªãã (ãããŠé«éãª) ããŒãµãŒã§ãã
rpython ãšåŒã°ãã Python ã®ã
åå¥è§£æã³ãŒãã¯ãã¹ãŠæ¬¡ã®ããã«å®çŸ©ãããŠããŸãã hy.lex.lexerã ãã®ã³ãŒãã¯ã»ãšãã©ã Hy ãå®çŸ©ããŠããã ãã§ã
ææ³ã§ãããå®éã®é£ããéšåã¯ãã¹ãŠ rply ã«ãã£ãŠåŠçãããŸã -- å®çŸ©ããã ãã§ã
rply ã®ãã³ãŒã«ããã¯ã hy.lex.ããŒãµãŒãçæãããããŒã¯ã³ãåãåãã
ããã«ã¡ã¯ã¢ãã«ãã¡ã
Hy ã¢ãã«ã¯ Hy ã®ãASTããšèããããšãã§ãããã¯ãã¯ãããæäœããŸãã
(çŽæ¥)ãã³ã³ãã€ã©ã Hy ãã³ã³ãã€ã«ãããšãã«äœ¿çšãããã®ã§ãã
é¢é£é ç® ALSOïŒ
ã»ã¯ã·ã§ã³ Hy Models Hy ã¢ãã«ãšãã®æå³ã®è©³çŽ°ã«ã€ããŠã¯ããã¡ããã芧ãã ããã
æé 3: Hy ç·šé ããž Python AST
Hy ã®éæ³ã®ã»ãšãã©ãããã§èµ·ãããŸãã ãã㧠Hy AST (ã¢ãã«) ãåãäžããŸãã
ãããŠãããã Python AST ã«ã³ã³ãã€ã«ããŸãã ããã€ãã®ãã¡ã³ããŒãªåºæ¥äºãããã§èµ·ãããŸãã
AST ã®åé¡ã解決ããã³ã³ãã€ã©ã§ã®äœæ¥ã¯ç§ãã¡ãè¡ãæãéèŠãªäœæ¥ã® XNUMX ã€ã§ãã
æã£ãŠãã
ã³ã³ãã€ã©ã¯å°ãè€éãªã®ã§ãæåã¯ç解ã§ããªããŠãå¿é ããå¿ èŠã¯ãããŸããã
æ£ãããªãã«ã¯å°ãæéãããããããããŸããã
ã³ã³ãã€ã©ãžã®äž»ãªãšã³ããªãã€ã³ãã¯æ¬¡ã®ãšããã§ãã HyASTCompiler.compileã ãã®ã¡ãœãããåŒã³åºããããšã
ã¯ã©ã¹äžã®å¯äžã®å®éã®ããããªãã¯ãã¡ãœãã (ã€ãŸããå®éã«ã¯ã
ãã®ã¡ãœãããè¶ ãã API)ã
å®éãå éšçã«ãããçŽæ¥ååž°ããããšã¯ã»ãšãã©ãªããã»ãšãã©ã®å Žå匷å¶çã«ååž°ããŸãã
ãã€ããªãŒã¹ã«ãŒ ã³ã³ãã€ã«ãåŒã®ãµãèŠçŽ ã§ãããè¡ãããšããããããŸãã
æã ãæã£ãŠããããšã ãµãèŠçŽ ãé©åã«ãã£ã¹ãããã§ãããã©ããã¯ãType ããŒã¹ã®ãã£ã¹ãããã£æ¬¡ç¬¬ã§ãã
ã³ã³ãã€ã«ãå®è¡ãããã¹ãŠã®ã¡ãœããã«ã¯ã @builds() ãã³ã¬ãŒã¿ãŒã ããªãã¯ã§ãã
ã³ã³ãã€ã«ãã Hy ã¢ãã«ã®ã¯ã©ã¹ãæž¡ãããæååã䜿çšã§ããŸãã
è¡šçŸã ããã¯ããã«è§£æ±ºããŸãã
å ã¹ããŒãž ã¿ã€ããã£ã¹ããã
ããå§ããŸããã ã³ã³ãã€ã« æ¹æ³ã æåã«è¡ãããšã¯ããªããžã§ã¯ãã®ã¿ã€ãã確èªããããšã§ã
ç§ãã¡ã¯æ§ç¯ããŠããŸãã ãæ§ç¯ã§ããæ¹æ³ããããã©ããã調ã¹ãŸãã ã¿ã€ãïŒïŒ æã
ãæã£ãŠããããããåŠçã§ããã¡ãœããã«ãã£ã¹ãããããŸãã ãããã§ããæ¹æ³ããªãå Žåã¯ã
ãã®åãæ§ç¯ãããšãå éšã§ äŸå€.
ããšãã°ã ãã€ã¹ããªã³ã°ãHy AST ãã Python ãžã®ã»ãŒ 1 察 1 ã®ãããã³ã°ããããŸãã
ASTã ã® ã³ã³ãã€ã«æåå ã¡ãœãã㯠ãã€ã¹ããªã³ã°ãããã³ãè¿ããŸã ast.Str()
æ£ããè¡çªå·ãšå 容ãå ¥åãããŸãã
ãã¯ãå±é
ãååŸããã ãã€åŒããããæ¢ç¥ã®ãã¯ããã©ããã確èªããããã·ã¥ããŸãã
ãåŒã³åºãããšã§æ¡åŒµãããŸãã hy.macros.macroexpandãçµæã ã«ããã·ã¥ããŠæ»ããŸãã
HyASTCompiler.compile.
äºçª ã¹ããŒãž åŒã®ãã£ã¹ããã
å¯äžã®ç¹æ®ãªã±ãŒã¹ã¯ã ãã€åŒã«å¿ããŠç°ãªãASTãäœæããå¿ èŠãããããã
åé¡ã®ç¹å¥ãªãã©ãŒã ã«ã€ããŠã ããšãã°ãäœããæã£ããšãã ïŒif true true ééãïŒãæã
ãçæããå¿ èŠããããŸã ast.IfããµãããŒããé©åã«ã³ã³ãã€ã«ããŸãã ããã¯ã @builds()
åŒæ°ãšããŠæååãæå®ããå Žåã
ã ã³ã³ãã€ã«åŒ (ãã㯠@builds(HyExpression)ïŒçºéããŸã
æåã®åŒæ°ã®æååã«åºã¥ããŸãã äœããã®çç±ã§æåã®åŒæ°ãããã§ãªãå Žåã¯ã
æååã®å Žåããã®å Žåãé©åã«åŠçããŸã (ããããã äŸå€).
æååã Hy ã«ç¥ãããŠããªãå Žåãããã©ã«ã㧠ast.CallãããããšããŸã
ã©ã³ã¿ã€ã åŒã³åºããå®è¡ããŸã (Python ã§ã¯æ¬¡ã®ãããªãã®) fooïŒïŒ).
åé¡ ããã ã Python AST
Python AST ã¯åªããŠããŸãã ãã®ãããã§ããã®ãããªåŒ·åãªãããžã§ã¯ããæ§ç¯ã§ããããã«ãªããŸããã
Python ãšããŸãæ¿ããæŠãå¿ èŠããªããªããŸãã ä»ã®ãã®ãšåãããã«ãç§ãã¡ã¯
ããã§ã¯ãééããå¯èœæ§ã®ããäžè¬çãªåé¡ã®çããªã¹ãã瀺ããŸãã
Python å·®å¥åãã ã®éã« ã¹ããŒãã¡ã³ã & åŒ.
ããã¯å€§ããããšã§ã¯ãªãããã«èããããããããŸãããå®éãã»ãšãã©ã® Python ããã°ã©ããŒã«ãšã£ãŠãããã¯æ¬¡ã®ãšããã§ãã
ããã«ãããã§ãããã®ç¬éã«ãªããŸãã
Python ã§ã¯ã次ã®ãããªããšãè¡ããŸãã
å°å· for x in ç¯å²ïŒ10ïŒïŒ ãã¹ãçç± å°å· åŒãåºåãã for ã§ã¯ãããŸãã
åŒãããã¯å¶åŸ¡ãã㌠ã¹ããŒãã¡ã³ãã§ãã ã®ãããªãã® 1 + 1 ãã®ãŸãŸã®åŒã§ã ã©ã ã
x: 1 + xããã ãã次ã®ãããªä»ã®èšèªæ©èœ if, forãŸã㯠while ã¹ããŒãã¡ã³ãã§ãã
ãããã«ã¯ Python ã«ãšã£ãŠã䟡å€ãããªããããäœããè¡ããããHy ã§ã®äœæ¥ãé£ãããªããŸãã
ãã㪠ïŒå°å· ïŒif true true ééãïŒïŒ ããã¯äžè¬çãªã ãã§ãªããäºæ³ãããããšã§ãã
ãã®çµæãç§ãã¡ã¯ã çµæ ãªããžã§ã¯ããç§ãã¡ã¯ãããããã®ãæäŸããŸã ast.stmt
å®è¡ããå¿ èŠããããã®ãšãåäžã® ast.expr äœãã®å€ãååŸããããã«äœ¿çšã§ããŸã
ã¡ããã©å®è¡ãããŸããã Hy ã¯ãå®è¡äžã«åŒ·å¶çã«äœããå²ãåœãŠãããšã§ãããå®çŸããŸãã
äŸãšããŠãHy:
(print (true true false ã®å Žå))
次ã®ããã«ãªããŸã:
çã§ããã°ïŒ
_mangled_name_here = True
ãã®ä»ïŒ
_mangled_name_here = False
_mangled_name_here ãå°å·
OKãããã¯å°ãåã§ããããªããªãããã®ã¹ããŒãã¡ã³ããå®éã«æ¬¡ã®ããã«å€æããããã§ãã
print True ã®å Žå㯠Trueããã以å€ã®å Žå㯠False
ç©äºãç¡çããæŒã蟌ãããšã§ã ast.expr ã§ããã°å¯èœã§ãããäžè¬çãªèãæ¹ã¯åœãŠã¯ãŸããŸãã
æé 4: Python ãã€ãã³ãŒã åºå & ã©ã³ã¿ã€ã
Python AST ããªãŒãå®æããããããã Python ã«ã³ã³ãã€ã«ããŠã¿ãŸãã
ãã€ãã³ãŒããããã·ã¥ã¹ã«ãŒã㊠è©äŸ¡ããã ããããå ã¯ãç§ãã¡ã¯ããã³ã³ãããŒã«ã§ããªããªãã
Python ããã¹ãŠãåŠçããŸãã ããããPython ãã¬ãŒã¹ããã¯ãpdbã
ãžã£ã³ãŽã¢ããªã¯åäœããŸãã
Hy ãã¯ã
䜿ãæ¹ ã²ã³ã·ã for ããå®å šãª ãã¯ã
ãã¯ããäœæãããšãã¯ãå€éšå€æ°ããã£ããã£ãããããã¯ãã䜿çšãããããªãããã«æ³šæããå¿ èŠããããŸãã
ãŠãŒã¶ãŒã³ãŒããšç«¶åããå¯èœæ§ã®ããå€æ°åã
ãã¯ãã®äŸã䜿çšããŸã nif ïŒåç §ããŠãã ãã
http://letoverlambda.com/index.cl/guest/chap3.html#sec_5 ããå®å šãªèª¬æã«ã€ããŠã¯ã)
nif ã¯äŸã§ãããæ°å€ã®ãããªãã®ã§ã ifãåŒã«åºã¥ããŠã次ã®ããããã
åŒãæ£ããŒãããŸãã¯è² ã§ãããã©ããã«å¿ããŠã3 ã€ã®åœ¢åŒãåŒã³åºãããŸãã
æåã®ãã¹ã¯æ¬¡ã®ããã«ãªããŸãã
(defmacro nif [expr pos-form XNUMX-form neg-form]
`(let [[obscure-name ~expr]]
(cond [(pos? obscure-name) ~pos-form]
[(ãŒã?ãããŸããªåå) ~ãŒãã®åœ¢åŒ]
[(neg?ãããŸããªåå) ~neg-form])))
ã³ã©ãã¬ãŒ ãããŸããªåå ä»ã®å€æ°ãšç«¶åããªãããã«å€æ°åãéžæããè©Šã¿ã§ãã
ã³ãŒãã ãããããã¡ãããåæã§ã¯ãããŸããããããä¿èšŒãããããã§ã¯ãããŸããã
ã¡ãœãã gensym ã¯ããŸãã«ãã®ãããªå Žåã«æ°ããäžæã®ã·ã³ãã«ãçæããããã«èšèšãããŠããŸãã
ããåªããããŒãžã§ã³ã® nif ã ããïŒ
(defmacro nif [expr pos-form XNUMX-form neg-form]
(let [[g (gensym)]]
`(let [[~g ~expr]]
(cond [(pos? ~g) ~pos-form]
[(ãŒã? ~g) ~ãŒã圢åŒ]
[(neg? ~g) ~neg-form]))))
ã·ã³ãã«ã XNUMX ã€ãããªããããããã¯ç°¡åãªã±ãŒã¹ã§ãã ãã ããè€æ°å¿ èŠãªå Žåã¯ã
gensym ã«ã¯ãåºæ¬çã«äžé£ã® ã
æïŒ
(gensonyms [abc] ä»ã)
...ïŒ
次ã®ããã«å±éãããŸã:
([[a (gensym)
[b (gensym)
[c (gensym)]]
...ïŒ
ããã§ç§ãã¡ãæžãçŽãã nif 次ã®ããã«ãªããŸã:
(defmacro nif [expr pos-form XNUMX-form neg-form]
(gensonym ä»ã [g]
`(let [[~g ~expr]]
(cond [(pos? ~g) ~pos-form]
[(ãŒã? ~g) ~ãŒã圢åŒ]
[(neg? ~g) ~neg-form]))))
æåŸã«ãããããã¹ãŠãå®è¡ããæ°ãããã¯ããäœæã§ããŸãã ãããã¯ã/g! ãšã
ã§å§ãŸããã¹ãŠã®èšå· g! ãããŠèªåçã«é»è©±ããããŸã ã²ã³ã·ã æ®ãã®éšåã§
ã·ã³ãã«ã ãã㧠ãïŒ ã«ãªã (gensym ãããïŒ.
ç§ãã¡ã®æçµããŒãžã§ã³ã¯ã nifãã§æ§ç¯ ãããã¯ã/g! ã«ãªããŸãïŒ
(defmacro/g! nif [expr pos-form XNUMX-form neg-form]
`(let [[~g!res ~expr]]
(cond [(pos? ~g!res) ~pos-form]
[(ãŒã? ~g!res) ~ãŒã圢åŒ]
[(neg? ~g!res) ~neg-form]))))
ãã§ã㯠ãã¯ã Arguments & 調é äŸå€
Hy ã³ã³ãã€ã© ãã«ãã€ã³
å¯çš¿è ã¢ãžã¥ãŒã« INDEX
å 容ïŒ
ã¢ããã©ãªã㯠ãã¯ã
ããŒãžã§ã³ 0.9.12 ã®æ°æ©èœã
ã¢ããã©ãªã㯠ãã¯ã ã¢ãžã¥ãŒã«ã«ãããHy ã§ã®é¢æ°åããã°ã©ãã³ã°ãéåžžã«ç°¡æœãã€ç°¡åã«ãªããŸãã
èªã¿ã
ã¢ããã©ãªã㯠ãã¯ãã¯ãäœããã®åœ¢åŒãæå³çã«ãã£ããã£ããããã°ã©ãã³ã° ãã¯ãã®äžçš®ã§ãã
ç §å¿ (åç §ããè¡šçŸ) ã«ãã£ãŠåç §ãããå¯èœæ§ã®ãããã¯ãã«æäŸãããŸãã
å¥ã®ãã®ã«ïŒã â ãŠã£ãããã£ã¢ (http://en.wikipedia.org/wiki/Anaphoric_macro)
ãã¯ã
AP-IF
䜿çšæ³ïŒ (ap-if (ãµãŒ) ïŒå°å· ããïŒïŒ
æåã®åœ¢åŒã®çå®æ§ãè©äŸ¡ããããããã€ã³ãããŸãã it çå®ãšåœãã®äž¡æ¹ã§
æã
æ¡
䜿çšæ³ïŒ ïŒæ¡ [1 2 3 4 5] ïŒå°å· ããïŒïŒ
ãªã¹ãå ã®åèŠçŽ ã®ãã©ãŒã ãè©äŸ¡ããŠå¯äœçšã確èªããŸãã
æ¯ææ¯æ
䜿çšæ³ïŒ (ap-each-while ãªã¹ã æé£ äœïŒ
è¿°èªãã©ãŒã ãè¿ãåèŠçŽ ã®ãã©ãŒã ãè©äŸ¡ããŸãã â¯.
=> (ap-each-while [1 2 3 4 5 6] (< it 4) (print it))
1
2
3
ap ããã
䜿çšæ³ïŒ (APããã ãã©ãŒã ãªã¹ãïŒ
ç §å¿åœ¢åŒã®ãããã¯ãé¢æ°ã§ã¯ãªãéåžžã®ããããšåãããã«æ©èœããŸãã
ãªããžã§ã¯ã㯠Hy 圢åŒãåããŸãã ç¹å¥ãªåå it ããçŸåšã®ãªããžã§ã¯ãã«ãã€ã³ããããŸãã
å埩å ã®ãªã¹ãã
=> (ãªã¹ã (ap-map (* it 2) [1 2 3]))
[2ã4ã6]
ap-map-when
䜿çšæ³ïŒ (ap-map-when äºå® 代衚 ãªã¹ãïŒ
è¿°èªé¢æ°ã䜿çšããŠãªã¹ãäžã®ãããã³ã°ãè©äŸ¡ãããã€é©çšãããã決å®ããŸãã
ãã©ãŒã ã
=> (ãªã¹ã (ap-map-whenå¥æ°? (* it 2) [1 2 3 4]))
[2ã2ã6ã4]
=> (ãªã¹ã (ap-map-when Even? (* it 2) [1 2 3 4]))
[1ã4ã3ã8]
ap ãã£ã«ã¿ãŒ
䜿çšæ³ïŒ (apãã£ã«ã¿ãŒ ãã©ãŒã ãªã¹ãïŒ
å±æèšãšåæ§ã«ããã®é¡ã®æ€èšŒã¯å®èœè©äŸ¡ãšäžŠè¡ããŠè¡ãã¹ãã§ããäžè¬çã«ãæœåºãé²ãã«ã€ããŠé«æž©ã«ãªãæœåºæ¹æ³ã¯ãæœåºãæåãã確çãäœãåŸåã«ãããŸãã ap ããã é¢æ°ã®ä»£ããã«ç¹å¥ãªåœ¢åŒã䜿çšããŠãèŠçŽ ããã£ã«ã¿ãªã³ã°ããŸãã
ãªã¹ãã ç¹å¥ãªåå it å埩å ã®çŸåšã®èŠçŽ ã«ãã€ã³ããããŸãã
=> (list (ap-filter (> (* it 2) 6) [1 2 3 4 5]))
[4ã5]
APæåŠ
䜿çšæ³ïŒ (ap-æåŠ ãã©ãŒã ãªã¹ãïŒ
ãã®é¢æ°ã¯æ¬¡ã®éã®ããšãè¡ããŸã ap ãã£ã«ã¿ãŒããæž¡ãèŠçŽ ãæåŠããŸãã
è¿°èª ã ç¹å¥ãªåå it å埩å ã®çŸåšã®èŠçŽ ã«ãã€ã³ããããŸãã
=> (list (ap-reject (> (* it 2) 6) [1 2 3 4 5]))
[1ã2ã3]
ap-dotimes
䜿çšæ³ (ap-dotimes n äœïŒ
ãã®é¢æ°ã¯æ¬äœãè©äŸ¡ããŸã n ç¹æ®å€æ°ã䜿çšããå it ãããã€ã³ãããã 0 ããž
1-Nã å¯äœçšã«æå¹ã§ãã
=> (setv n [])
=> (ap-dotimes 3 (.append n it))
=> n
[0ã1ã2]
APãã¡ãŒã¹ã
䜿çšæ³ (ap-first äºå® ãªã¹ãïŒ
ãã®é¢æ°ã¯ãè¿°èªãæž¡ãæåã®èŠçŽ ãè¿ããŸãã ãªãã ãšãšãã«
ç¹æ®å€æ° it å埩å ã®çŸåšã®èŠçŽ ã«ãã€ã³ããããŸãã
=>(ap-first (> it 5) (ç¯å² 10))
6
ap-last
䜿çšæ³ (ap-last äºå® ãªã¹ãïŒ
ãã®é¢æ°ã¯ãè¿°èªãæž¡ãæåŸã®èŠçŽ ãè¿ããŸãã ãªããç¹å¥ãª
å€æ° it å埩å ã®çŸåšã®èŠçŽ ã«ãã€ã³ããããŸãã
=>(ap-last (> it 5) (ç¯å² 10))
9
apãªãã¯ã·ã§ã³
䜿çšæ³ (AP ãªãã¥ãŒã¹ ãã©ãŒã ãªã¹ã ãªãã·ã§ã³(&ãªãã·ã§ã³) åæå€ïŒ
ãã®é¢æ°ã¯ãæ¬æã®æåã® 2 ã€ã®èŠçŽ ã«ãã©ãŒã ãé©çšããçµæãè¿ããŸãã
ãªã¹ãããªããªããŸã§çµæãš 3 çªç®ã®èŠçŽ ãªã©ãé©çšããŸãã ãªãã·ã§ã³ã§ã
åæå€ãæå®ã§ãããããé¢æ°ãåæå€ã«é©çšããã
代ããã«æåã®èŠçŽ ã䜿çšããŸãã ããã«ãããå埩ãããèŠçŽ ã次ã®ããã«å ¬éãããŸãã it ãšé»æµ
环ç©å€ãšã㊠ACC.
=>(ap-reduce (+ it acc) (ç¯å² 10))
45
ã«ãŒã/ç¹°ãè¿ã
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
ã ã«ãŒã / åçºãã ãã¯ãã䜿çšãããšãããã°ã©ããŒã¯æ«å°ŸåŒã³åºãæé©å (TCO) ãç°¡åã«äœ¿çšã§ããŸãã
圌ãã® Hy ã³ãŒãã«ã
æ«å°ŸåŒã³åºãã¯ãå¥ã®ããã·ãŒãžã£å ã§æåŸã®åŒã³åºããšããŠçºçãããµãã«ãŒãã³åŒã³åºãã§ãã
ã¢ã¯ã·ã§ã³; æ»ãå€ãçæããå Žåãããããã®å€ã¯åŒã³åºãåŽã«ãã£ãŠããã«è¿ãããŸãã
æé ã ãµãã«ãŒãã³ãå®è¡ããåŒã³åºãã®å Žåãæçµçã«ã¯
ãã®åããµãã«ãŒãã³ãåŒã³åºããã§ãŒã³ã®äžã§åã³åŒã³åºãããæ«å°Ÿã®äœçœ®ã«ããã
ãã®ãããªãµãã«ãŒãã³ã¯æ«å°Ÿååž°çã§ãããšèšãããååž°ã®ç¹æ®ãªã±ãŒã¹ã§ãã
æ«å°ŸåŒã³åºãã¯ãæ°ããã¹ã¿ãã¯ãè¿œå ããã«å®è£ ã§ããããéèŠã§ãã
ãã¬ãŒã ãåŒã³åºãã¹ã¿ãã¯ã«è¿œå ããŸãã çŸåšã®æé ã®ãã¬ãŒã ã®å€§éšåã¯å¿ èŠãããŸããã
ããã«ãããŒã«ã³ãŒã«ã®ãã¬ãŒã ã«çœ®ãæããããšãã§ããŸãã ããã°ã©ã ã¯ãžã£ã³ãã§ããããã«ãªããŸã
åŒã³åºããããµãã«ãŒãã³ã«ã æšæºã®åŒã³åºãã·ãŒã±ã³ã¹ã®ä»£ããã«ãã®ãããªã³ãŒããçæããããšã¯ã
æ«å°ŸåŒã³åºãã®åé€ããŸãã¯æ«å°ŸåŒã³åºãã®æé©åãšåŒã°ããŸãã æ«å°ŸåŒã³åºãã®åé€ãå¯èœ
æ«å°Ÿäœçœ®ã§ã®ããã·ãŒãžã£åŒã³åºã㯠goto ã¹ããŒãã¡ã³ããšåããããå¹ççã«å®è£ ãããŸãã
ãããã£ãŠãå¹ççãªæ§é åããã°ã©ãã³ã°ãå¯èœã«ãªããŸãã â ãŠã£ãããã£ã¢ (â
http://en.wikipedia.org/wiki/Tail_call)
ãã¯ã
ã«ãŒã
ã«ãŒã ååž°ãã€ã³ãã確ç«ããŸãã ãš ã«ãŒã, åçºãã ã«èšå®ãããå€æ°ãåãã€ã³ãããŸãã
ååž°ãã€ã³ããååŸããã³ãŒãã®å®è¡ããã®ååž°ãã€ã³ãã«éãè¿ããŸãã ãã åçºãã ã§äœ¿çšãããŠããŸã
æ«å°Ÿä»¥å€ã®äœçœ®ã®å ŽåãäŸå€ãã¹ããŒãããŸãã
䜿çšæ³ïŒ ïŒã«ãŒã ãã€ã³ãã£ã³ã° ïŒäŒã¿ äœïŒ
äŸïŒ
(hy.contrib.loopãå¿ èŠ)
(å®çŸ©éä¹ [n]
(ã«ãŒã [[in] [acc 1]]
(if (ãŒã? i)
ACC
(recur (dec i) (* acc i))))
(éä¹1000)
ãããã«ã
ããŒãžã§ã³ 0.10.0 ã®æ°æ©èœã
ãããã«ã æå®ãããæ°ã® args ããã³/ãŸã㯠kwargs ã«ãã£ãŠé¢æ°ãã¢ãªã㣠ãªãŒããŒããŒãã§ããŸãã
Clojure ã®èãæ¹ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸã å®çŸ©.
=> (hy.contrib.multiãå¿ èŠ)
=> (ãããã«ã楜ãã
... ([a] "a")
... ([ab] "ab")
... ([abc] "abc"))
=> (楜ãã¿1)
ããã
=> (楜ãã 1 2)
ãã¢ãã
=> (楜ãã 1 2 3)
ãABCã
HACKING ON HY
å å ¥ ç§ãã¡ã® ãã€ãïŒ
Hyãããã¯ãã«æ¥ãŠãã ããïŒ
ãã²éã³ã«æ¥ãŠãã ãã #ã〠on irc.freenode.net!
Twitter ã§ãã®ä»¶ã«ã€ããŠè©±ãåã£ãŠãã ãã #ã〠ããã·ã¥ã¿ã°ïŒ
ããã«ã€ããŠããã°ã«æžããŠãã ããïŒ
ïŒããèããã«ïŒé£ã®å®¶ã®ãã§ã³ã¹ã«ã¹ãã¬ãŒãã€ã³ãããªãã§ãã ããã
ããã¯ïŒ
ãããè¡ãïŒ
1ã äœæãã ããŒãã£ã« ç°å¢:
$ virtualenv venv
ãããŠãããã¢ã¯ãã£ãåããŸã:
$ ã venv/bin/ã¢ã¯ãã£ãå
ãŸãã¯äœ¿çš ä»®æ³ç°å¢ã©ãã㌠仮æ³ç°å¢ãäœæããã³ç®¡çããã«ã¯:
$ mkvirtualenv hy
$ã¯ãŒã¯ãªã³ãã€
2. ãœãŒã¹ ã³ãŒããååŸããŸãã
$ git clone https://github.com/hylang/hy.git
ãŸãã¯ãã©ãŒã¯ã䜿çšããŸãã
$ git ã¯ããŒã³ [ã¡ãŒã«ä¿è·]: /hy.git
3. ãããã³ã°ã®ããã«ã€ã³ã¹ããŒã«ããŸãã
$ cd hy/
$ pip install -e ã
4. ä»ã®éçºèŠä»¶ãã€ã³ã¹ããŒã«ããŸãã
$ pip install -r èŠä»¶-dev.txt
5. çŽ æŽãããããšãããã ããªããæãéããããšã«å¯ŸããŠã誰ããåã³ãå«æªæã§éåã声ãäžããŸãã
ãã¹ãïŒ
ãã¹ãã¯æ¬¡ã®å Žæã«ãããŸã ãã¹ã/ã ã䜿çšããŠãããŸã 錻.
ãã¹ããå®è¡ããã«ã¯:
$ 錻ãã¹ã
ãã¹ããæžã --- ãã¹ãã¯è¯ããã®ã§ã!
ãŸãããµããŒããããŠãããã¹ãŠã®ãã©ãããã©ãŒã ãš PEP 8 æºæ ã®ãã¹ããå®è¡ããããšããå§ãããŸãã
ã³ãŒãã ãããè¡ãã«ã¯ãtox ãå®è¡ããŸãã
$ããã¯ã¹
æžé¡ïŒ
ããã¥ã¡ã³ãã¯æ¬¡ã®å Žæã«ãããŸã docs /ã ã䜿çšããŠãããŸã ã¹ãã£ã³ã¯ã¹.
HTML ã§ããã¥ã¡ã³ããäœæããã«ã¯:
$ cd ããã¥ã¡ã³ã
$ HTML ãäœæ
ããã¥ã¡ã³ããæžã --- ããã¥ã¡ã³ãã¯è¯ããã®ã§ã! ãã®ãã¯ã¿ãŒãïŒ
è²¢ç®
è²¢ç®ã¯å€§æè¿ã§ããã倧ãã«æè¬ãããŸããã©ããªäºçŽ°ãªããšã§ã Hy ãããè¯ãããã®ã«åœ¹ç«ã¡ãŸã
é©ãã°ããã
ãã«ãªã¯ãšã¹ãã¯çŽ æŽãããã§ãïŒ ç§ãã¡ã¯åœŒããæããŠããŸãã ããã«ã¯ã€ãã¯ã¬ã€ãããããŸã:
· ãªããžããªããã©ãŒã¯ããæ©èœ/ä¿®æ£ã®ããã㯠ãã©ã³ããäœæããŸãã çŽæ¥å€æŽãå ããããšã¯é¿ããŠãã ãã
ãã¹ã¿ãŒãã©ã³ãäžã§ã
· ãã¹ãŠã®æ°æ©èœã«ã¯ãã¹ãã䌎ãå¿ èŠããããŸãã
· PR ãéä¿¡ããåã«ããã¹ããå®è¡ããã³ãŒããã¹ã¿ã€ã«ã«ç §ãããŠãã§ãã¯ãããŠããããšã確èªããŠãã ããã
ã¬ã€ãã ãããã®äž¡æ¹ãäžåºŠã«è¡ãããšãã§ããŸãã
$ã¡ã€ã¯d
· ã³ããããè«çãŠãããã«äœæããŸããããã«ãããåŸã§è¿œè·¡ããã³ããã²ãŒããããããªããŸãã åã«
PR ãéä¿¡ããå Žåã¯ãç°¡åã«æ»ã£ãŠããããšãã§ããå€æŽã»ããã«ã³ããããå§çž®ããŠã¿ãŠãã ããã
åŸã§ã ãŸããå€æŽã»ããå ã«åœã®ç©ºçœãæ®ããªãããã«ããŠãã ããã ãã
åŸã§ç©ºçœä¿®æ£ã³ããããäœæãããããšãåé¿ããŸãã
· ã³ããã ã¡ãã»ãŒãžã«é¢ããŠã¯ã次ã®ç¹ã«åŸãããã«ããŠãã ããã
· Git ã³ããã ã¡ãã»ãŒãžã®æåã®è¡ã¯ 50 æåã®å¶éãå®ã£ãŠãã ããã
· 詳现/説æã«ã€ããŠã¯ããã®åŸã«ç©ºè¡ãå ¥ããŠç¶è¡ããŠãã ããã
ã³ãããã«ã€ããŠè©³ãã説æããŸãã
· æåŸã«ãèªåèªèº«ã AUTHORS ãã¡ã€ã«ã« (å¥ã®ã³ããããšããŠ) è¿œå ããŸããããªãã«ã¯ãããã䟡å€ããããŸã :)
· ãã¹ãŠã®åä¿¡å€æŽã¯ãHylang ã®ã³ã¢ ããŒã ã® 2 人ã®ç°ãªãã¡ã³ããŒã«ãã£ãŠæ¿èªãããå¿ èŠããããŸãã
è¿œå ã®ã¬ãã¥ãŒã¯æããã«æè¿ã§ããããããã®å Žåãå°ãªããšã 2 åã®æ¿èªãå¿ èŠã§ãã
å€æŽããŸãã
· ã³ã¢ ã¡ã³ããŒã PR ãéä¿¡ããå Žåã¯ãPR ãå«ãŸãªã 2 人ã®ã³ã¢ ã¡ã³ããŒãèŠã€ããŠãã ããã
PRæçš¿è ã ããã§ã®èãæ¹ã¯ãPR äœæè ãšååãããã XNUMX 人ãæ¿èªãããšãããã®ã§ãã
å€æŽã»ããå šäœã
· ããã¥ã¡ã³ãããã®ä»ã®äºçŽ°ãªå€æŽã«ã€ããŠã¯ãXNUMX ã€ã® ACK ã®åŸã«ããŒãžããã®ãé©åã§ãã ç§ãã¡ã¯æã£ãŠãã
ã«ãã¬ããžãäœãã®ã§ããã®éå£ãäœãä¿ã€ããšãæãŸããã§ãããã
åºæ¬ ããã±ãŒãžçš®é¡
Hy ã®ã³ã¢éçºããŒã ã¯æ¬¡ã®éçºè ã§æ§æãããŠããŸãã
· ãžã¥ãªã¢ã³ 段äž
· ã¢ãŒãã³ ãªã³ãã«ã
· J ã±ãã¹ ç¥æ§ã§ãã
· Gergely ããž
· ãã¥ãã« ãã¥ã«ã
· ã«ã¬ã³ ã©ã¹ã¿ãã
· ã¢ãã·ã§ãŒã¯ L
· ã¯ãªã¹ããã¡ãŒ ã¢ã©ã³ ãŠã§ããŒ
· ã³ã³ã©ãŒã ãã³ã»ã³
· ãŠã£ã« ã«ãŒã³ã»ã°ãªãŒã³
· Paul Cairns ã¿ãªã¢ã¢ã³ã
· ãã³ã©ã¹ ãã³ããªã¢ã³ã
· ãã ãã«ããŒã
· Berker ãã¯ãµã°
· ã¯ãªã³ãã³ N. ãã©ã€ã¹ããã
· 圌 ã»ããž
onworks.net ãµãŒãã¹ã䜿çšã㊠hy ãªã³ã©ã€ã³ã䜿çšãã