เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบžเบฒเบชเบฒเบเบฃเบฑเปˆเบ‡เปเบญเบชเบ›เบฒเป‚เบเบ™

Ad


OnWorks favicon

hy - เบญเบญเบ™เบฅเบฒเบเปƒเบ™เบ„เบฅเบฒเบง

เปเบฅเปˆเบ™ hy เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเบœเปˆเบฒเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ hy เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเป‚เบ”เบเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเป†เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบ™เป„เบฅเบ™เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบฑเปˆเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เป‚เบ„เบ‡เบเบฒเบ™:

NAME


hy - hy เป€เบญเบเบฐเบชเบฒเบ™ [เบฎเบนเบš: Hy] [image]

เบžเบฐเบเบฒเบเบฒเบก Hy https://try-hy.appspot.com

P&IP https://pypi.python.org/pypi/hy

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ https://github.com/hylang/hy

เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆ hylang-เบชเบปเบ™เบ—เบฐเบ™เบฒ

irc #เป€เบญเบต เปƒเบ™ Freenode

เบชเป‰เบฒเบ‡ เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš
Travis CI.UNINDENT

Hy เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบเบญเบ”เบขเป‰เบฝเบกเบ‚เบญเบ‡ Lisp เบ—เบตเปˆเบเบฑเบ‡เบขเบนเปˆเปƒเบ™ Python.

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Hy เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ” Lisp เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Python Abstract Syntax Tree, เบ—เปˆเบฒเบ™เบกเบต
เป‚เบฅเบเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ Python เบขเบนเปˆเบ›เบฒเบเบ™เบดเป‰เบงเบกเบทเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปƒเบ™เบฎเบนเบšเปเบšเบš Lisp!

เป€เบ™เบทเป‰เบญเปƒเบ™:

เบ”เปˆเบงเบ™


[เบฎเบนเบšเบžเบฒเบš: เบเบญเบ”เบ‚เบญเบ‡ Karen Rustard] [เบฎเบนเบšเบžเบฒเบš]

(เบ‚เปเบ‚เบญเบšเปƒเบˆ Karen Rustad เบชเปเบฒเบฅเบฑเบš Cuddles!)

เบงเบดเบ—เบตเบเบฒเบ™ เป€เบ–เบดเบ‡ GET HY REAL FAST:

1. เบชเป‰เบฒเบ‡เบ virtual Python เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก.

2. เป€เบ›เบตเบ”เปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Virtual Python เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

3. เบ•เบดเบ”เบ•เบฑเป‰เบ‡ hy เบˆเบฒเบ P&IP เบเบฑเบš pip เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ hy.

4. เป€เบฅเบตเปˆเบก REPL เบเบฑเบš hy.

5. เบžเบดเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™ REPL:

=> (เบžเบดเบก "Hy!")
เป€เบฎเบตเป‰เบ!
=> (defn salutationsnm [เบŠเบทเปˆ] (เบžเบดเบก (+ "Hy "เบŠเบทเปˆ "!")))
=> (เบ„เปเบฒเบŠเบปเบกเป€เบŠเบตเบ "เบŠเบทเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ")
เบŠเบทเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ!

เปเบฅเบฐเบญเบทเปˆเบ™เป†

6. เบเบปเบ” CTRL-D เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”.

เป‚เบญโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒ! เบ™เบฑเป‰เบ™เปเบกเปˆเบ™ เบญเบฑเบ”เบชเบฐเบˆเบฑเบ™! I เบ•เป‰เบญเบ‡เบเบฒเบ™ to เบ‚เบฝเบ™ a Hy เป‚เบ„เบ‡เบเบฒเบ™.

7. เป€เบ›เบตเบ”โ€‹เบšเบฑเบ™โ€‹เบ™เบฒโ€‹เบ—เบดโ€‹เบเบฒเบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™ elite เปเบฅเบฐโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹:

(เบžเบดเบก "เบ‚เป‰เบญเบเบˆเบฐเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบ™ syntax Python, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบš Hy.")

8. เบšเบฑเบ™เบ—เบถเบเป€เบ›เบฑเบ™ awesome.hy.

9. เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™ Hy เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™:

hy awesome.hy

10โ€‹.
เบซเบฒเบเปƒเบˆเป€เบฅเบดเบเป†เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เบฅเบฐเบšเบฒเบเบญเบฒเบเบฒเบ”เบชเบนเบ‡.

11โ€‹.
เบเบดเป‰เบกเบขเปˆเบฒเบ‡เป‚เบซเบ”เบฎเป‰เบฒเบ เปเบฅเบฐ เบเปˆเบฒเบ‡เบญเบญเบเป„เบ›เบ—เบตเปˆ hydeaway เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ เปเบฅเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบงเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰.

TUTORIAL


เบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบšเบชเบนเปˆเบเบฒเบ™เบชเบญเบ™ Hy!

เป‚เบ”เบเบซเบเปเป‰, Hy เปเบกเปˆเบ™เบžเบฒเบชเบฒ Lisp, เปเบ•เปˆเป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบ›เปˆเบฝเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเป‰เป€เบ›เบฑเบ™ Python ...
เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ•เบปเป‰เบ™เป„เบกเป‰ syntax เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบ‚เบญเบ‡ Python เปเบ—เป‰เป†! (เบซเบผเบทโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบกเบฑเบ™โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เป€เบ‚เบฑเป‰เบกโ€‹เปเบ‚เบ‡โ€‹เบซเบผเบฒเบโ€‹
เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, Hy เปเบกเปˆเบ™ lisp-stick เปƒเบ™ Python!)

เบ™เบตเป‰เปเบกเปˆเบ™เบ”เบตเบซเบผเบฒเบเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ Hy เบกเบตเบซเบผเบฒเบเบชเบดเปˆเบ‡เบซเบผเบฒเบเบขเปˆเบฒเบ‡:

ยท Lisp เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบ Pytonic เบซเบผเบฒเบ

ยทเบชเปเบฒเบฅเบฑเบš Lispers, เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบญเปเบฒเบ™เบฒเบ”เบšเป‰เบฒเบ‚เบญเบ‡ Lisp เปเบ•เปˆเปƒเบ™เป‚เบฅเบเบเบงเป‰เบฒเบ‡เบ‚เบญเบ‡ Python's
เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” (เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Django เปƒเบ™ Lisp!)

ยท เบชเปเบฒเบฅเบฑเบš Pythonistas, เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ„เบปเป‰เบ™เบซเบฒ Lisp, เบˆเบฒเบเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบ‚เบญเบ‡ Python!

ยทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ—เบธเบโ€‹เบ„เบปเบ™โ€‹: เป€เบ›เบฑเบ™โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ—เบตเปˆโ€‹เบซเบ™เป‰เบฒโ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบซเบผเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบ„เบดเบ” neatโ€‹!

เบžเบทเป‰เบ™เบ–เบฒเบ™ intro to lisp เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ Pythonistas
เบ•เบปเบเบฅเบปเบ‡, เบšเบฒเบ‡เบ—เบตเป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบ„เบตเบเปƒเบŠเป‰ Lisp เบกเบฒเบเปˆเบญเบ™, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเป€เบ„เบตเบเปƒเบŠเป‰ Python!

เป‚เบ„เบ‡เบเบฒเบ™ "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ" เปƒเบ™ Hy เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”. เปƒเบซเป‰เบฅเบญเบ‡เบกเบฑเบ™:

(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ")

เป€เบซเบฑเบ™เบšเป? เบ‡เปˆเบฒเบ! เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบ„เบฒเบ”เป€เบ”เบปเบฒ, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบš Python เบ‚เบญเบ‡:

เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ"

เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰:

(+ 1 3)

เป€เบŠเบดเปˆเบ‡เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒ 4 เปเบฅเบฐเบˆเบฐเป€เบ—เบปเปˆเบฒเบเบฑเบš:

1 + 3

เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบชเบฑเบ‡โ€‹เป€เบเบ”โ€‹เป€เบซเบฑเบ™โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เป€เบญเบตเป‰เบ™โ€‹เปเบฅเบฐโ€‹
เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปƒเบ™ Hy (เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเปˆเบงเบ™เปƒเบซเบเปˆ
Lisps) เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบซเบผเบฒเบ argument เป„เบ›เบซเบฒเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบšเบงเบ:

(+ 1 3 55)

เบŠเบถเปˆเบ‡เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒ 59.

เบšเบฒเบ‡เบ—เบตเป€เบˆเบปเป‰เบฒเป€เบ„เบตเบเป„เบ”เป‰เบเบดเบ™เบ‚เบญเบ‡ Lisp เบกเบฒเบเปˆเบญเบ™เปเบ•เปˆเบšเปเปˆเบฎเบนเป‰เบซเบผเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™. Lisp เบšเปเปˆเบเบฒเบเบ„เบทเบเบฑเบšเป€เบˆเบปเป‰เบฒ
เบญเบฒเบ”เบˆเบฐเบ„เบดเบ”, เปเบฅเบฐ Hy เบชเบทเบšเบ—เบญเบ”เบกเบฒเบˆเบฒเบ Python, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Hy เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰ Lisp.
เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบš Lisp เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบงเบปเบ‡เป€เบฅเบฑเบšเบซเบผเบฒเบ. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐ
เบ—เปเบฒเบญเบดเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบชเบฑเบšเบชเบปเบ™, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบเบฒเบเบซเบผเบฒเบ. เปƒเบซเป‰โ€‹เป€เบฎเบปเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบฐโ€‹เบ™เบดเบ”โ€‹เบชเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบ—เบตเปˆโ€‹
เบซเปเปˆเบขเบนเปˆเปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ™เบฒเบเบžเบฒเบชเบฒ Hy:

(setv เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš (- (/ (+ 1 3 88) 2) 8))

เบ™เบตเป‰เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒ 38. เปเบ•เปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เบ”เบต, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบฝเบšเป€เบ—เบปเปˆเบฒเปƒเบ™
python:

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš = ((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) 8))
; เบซเบเปเป‰เป€เบ›เบฑเบ™...
(เบœเบปเบ™ setv (- 46 8))
; เบซเบเปเป‰เป€เบ›เบฑเบ™...
(เบœเบปเบ™ setv 38)

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ„เบฒเบ”เป€เบ”เบปเบฒ, เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เบญเบญเบเบชเบธเบ”เบ—เป‰เบฒเบเบเบฑเบš เบŠเบธเบ” เปเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบเบณเบ™เบปเบ”เบ•เบปเบงเปเบ›
"เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš" เป€เบ–เบดเบ‡ 38.

เป€เบซเบฑเบ™เบšเป? เบšเปเปˆเบเบฒเบเป€เบเบตเบ™เป„เบ›!

เบ™เบตเป‰เปเบกเปˆเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ Lisp. Lisp เบซเบเปเป‰เบกเบฒเบˆเบฒเบ "เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ"; เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ
เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. (เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš Python
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบ•เปˆเบกเบตเบงเบปเบ‡เป€เบฅเบฑเบšเบชเบตเปˆเบซเบฅเปˆเบฝเบกเปเบ—เบ™, เปƒเบ”
เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เป‰เบฒเบ‡โ€‹เป€เบ—เบดเบ‡โ€‹เบ™เบตเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบฑเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปเบฅเบฐโ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹.) เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹
เป€เบ‚เบปเป‰เบฒโ€‹เปƒเบˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ‚เบถเป‰เบ™โ€‹เป‚เบ”เบโ€‹เบกเบตโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบซเบผเบฒเบโ€‹, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เปƒเบซเป‰โ€‹เป€เบฎเบปเบฒโ€‹เบ‚เบฝเบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™ Python เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹, เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบกเบฑเบ™โ€‹,
เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™ Hy เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ:

def simple_conversation():
เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต! เบ‚เป‰เบญเบเบขเบฒเบเบฎเบนเป‰เบˆเบฑเบเป€เบˆเบปเป‰เบฒ. เบšเบญเบเบ‚เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเป€เบญเบ‡!"
name = raw_input("เป€เบˆเบปเป‰เบฒเบŠเบทเปˆเบซเบเบฑเบ‡?")
age = raw_input("เบญเบฒเบเบธเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡?")
เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต" +เบŠเบทเปˆ + "! เบ‚เป‰เบญเบเป€เบซเบฑเบ™เป€เบˆเบปเป‰เบฒ " + เบญเบฒเบเบธ + "เบ›เบต."

simple_conversation()

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ„เบท:

เบชเบฐเบšเบฒเบเบ”เบต! เบ‚เป‰เบญเบเบขเบฒเบเบฎเบนเป‰เบˆเบฑเบเป€เบˆเบปเป‰เบฒ. เบšเบญเบเบ‚เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡!
เป€เบˆเบปเป‰เบฒโ€‹เบŠเบทเปˆโ€‹เบซเบเบฑเบ‡? เปเบเบฃเบต
เบญเบฒเบเบธเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡? 38
เบชเบฐเบšเบฒเบเบ”เบต Gary! เบ‚เป‰เบญเบเป€เบซเบฑเบ™เป€เบˆเบปเป‰เบฒเบญเบฒเบเบธ 38 เบ›เบต.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Hy เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ:

(defn เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบ []
(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต! เบ‚เป‰เบญเบเบขเบฒเบเบฎเบนเป‰เบˆเบฑเบเป€เบˆเบปเป‰เบฒ. เบšเบญเบเบ‚เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเป€เบญเบ‡!")
(เบŠเบทเปˆ setv (เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบดเบš "เบŠเบทเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡?"))
(setv age (เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบดเบš "เบญเบฒเบเบธเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡?"))
(เบžเบดเบก (+ "เบชเบฐเบšเบฒเบเบ”เบต" เบŠเบทเปˆ "! เบ‚เป‰เบญเบเป€เบซเบฑเบ™เป€เบˆเบปเป‰เบฒเป€เบ›เบฑเบ™"
เบญเบฒเบเบธ "เบ›เบต.")))

(เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹)

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เปƒเบ™เปเบ•เปˆเบฅเบฐ
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ (เบซเบผเบทเบกเบฐเบซเบฒเบžเบฒเบ ... เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ›เบซเบฒเบœเบนเป‰เบ—เบตเปˆเบ•เปเปˆเบกเบฒ) เบ–เบทเบเป€เบญเบตเป‰เบ™
เปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡, เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบญเบญเบเบงเปˆเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”.
(เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ„เบฒเบ”เป€เบ”เบปเบฒเบ„เบทเบเบฑเบ™, defn เปเบกเปˆเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™ Hy เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹.)

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบซเบผเบฒเบเป†เบ„เบปเบ™เบžเบปเบšเบงเปˆเบฒเบกเบฑเบ™เบชเบฑเบšเบชเบปเบ™เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบตเบงเบปเบ‡เป€เบฅเบฑเบšเบซเบผเบฒเบ,
เปเบ•เปˆเบกเบตเบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™: เบฎเบฑเบเบชเบฒเบเบฒเบ™เบซเบเปเป‰เปœเป‰เบฒเปƒเบซเป‰เบ‡เบฒเบก เปเบฅเบฐ
เปƒเบŠเป‰เบ•เบปเบงเปเบเป‰เป„เบ‚เบ—เบตเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบงเบปเบ‡เป€เบฅเบฑเบš (เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบ„เบปเบ™
เบงเบปเบ‡เป€เบฅเบฑเบšเบ„เบนเปˆเบเบฑเบš) เปเบฅเบฐเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เบˆเบฐเป€เบฅเบตเปˆเบกเบกเบตเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบ.

เบกเบตเบšเบฒเบ‡เบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเบ—เบตเปˆเบˆเบฐเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ
เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบซเบผเบฑเบเบ‚เบญเบ‡ Lisp เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆ. เบชเปเบฒเบฅเบฑเบšเบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡, เบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™
เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐ parse เปเบฅเบฐโ€‹เบงเปˆเบฒโ€‹เป‚เบ„เบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบเบฒเบ™โ€‹เบ•เบปเบงโ€‹เบˆเบดเบ‡โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เป€เบœเบตเบโ€‹เบซเบผเบฒเบโ€‹เบขเปˆเบฒเบ‡โ€‹เบˆเบฐโ€‹เปเบˆเป‰เบ‡โ€‹
เปƒเบซเป‰โ€‹เป€เบˆเบปเป‰เบฒ. (เบกเบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™ hy เบšเปˆเบญเบ™เบ—เบตเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ Python's
เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ ... เปƒเบ™ "เบšเปเบฅเบดเบชเบธเบ”" Lisps เป€เบŠเบฑเปˆเบ™ Common Lisp เบซเบผเบท Emacs Lisp, เบ‚เปเป‰เบกเบนเบ™
เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบกเบตเบซเบผเบฒเบ
เปƒเบเป‰เบ•เบปเบง.)

เบ„เบงเบฒเบกเบซเบกเบฒเบเบญเบทเปˆเบ™เบ‚เบญเบ‡เบ™เบตเป‰เปเบกเปˆเบ™ macros: เบ–เป‰เบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบกเป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ‡เปˆเบฒเบเป†
เป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เบ™เบฑเป‰เบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบ, เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบฒเบชเบฒเปƒเบซเบกเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เป„เบงเบซเบผเบฒเบ. เบเปˆเบญเบ™เปœเป‰เบฒเบ™เบตเป‰ Hy, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™
เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Python ... เบ”เบฝเบงเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ macros เป„เบ”เป‰เบขเปˆเบฒเบ‡เบšเปเปˆเปœเป‰เบฒเป€เบŠเบทเปˆเบญ
เบžเบฐโ€‹เบฅเบฑเบ‡โ€‹เบ‡เบฒเบ™ (เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบกเบฑเบ”โ€‹เบฅเบฐโ€‹เบงเบฑเบ‡โ€‹เป€เบžเบทเปˆเบญโ€‹เบšเปเปˆโ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปเบ™โ€‹เปƒเบชเปˆโ€‹เบ•เบตเบ™โ€‹)โ€‹!

Hy is a เบกเบตเบฅเบปเบ”เบŠเบฒเบ” lisp Python
Hy เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ•เบปเป‰เบ™เป„เบกเป‰ syntax เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบ‚เบญเบ‡ Python, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบ™เป„เบงเป†เบ™เบตเป‰เบ—เปˆเบฒเบ™เบˆเบฐเป€เบฅเบตเปˆเบกเบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ™เบฑเป‰เบ™
เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบ‚เบญเบ‡ python เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ›เบฒเบเบ™เบดเป‰เบงเบกเบทเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ Python เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™ Hy. เปƒเบซเป‰เบ—เบปเบ”เบฅเบญเบ‡
เบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ™เบฒเบเบžเบฒเบชเบฒเบ‚เบญเบ‡เบฅเบฒเบง:

=> [1 2 3]
[1, 2, 3]
=> {"เบซเบกเบฒ" "เป€เบ›เบทเบญเบ"
... "เปเบกเบง" "เป€เบกเบง"}
...
{'dog': 'เป€เบ›เบทเบญเบ', 'เปเบกเบง': 'meow'}
=> ( , 1 2 3 )
(1, 2, 3)

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš Lisps เบญเบทเปˆเบ™เป†, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบชเบปเบ™เปƒเบˆเบงเปˆเบฒ Hy เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Common
Lisp เบงเบดเบ—เบตเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡:

=> '(1 2 3)
(1L 2L 3L)

เบ—เปˆเบฒเบ™โ€‹เบเบฑเบ‡โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบ—เบธเบโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹' เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ”เบตโ€‹:

=> (.strip "fooooo")
"เบŸเบนเป‰"

เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡? เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš:

"fooooo ".strip()

เบ–เบทเบเบ•เป‰เบญเบ‡---Lisp เบเบฑเบš notation dot! เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบตโ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบดโ€‹เบ‡โ€‹เบ™เบตเป‰โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹
เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

(setv this-string "fooooo")
(this-string.strip)

เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚?:

(เบ–เป‰เบฒ (เบžเบฐเบเบฒเบเบฒเบกเบšเบฒเบ‡เบญเบฑเบ™)
(เบžเบดเบก "เบ™เบตเป‰เปเบกเปˆเบ™เบ–เป‰เบฒเป€เบ›เบฑเบ™เบˆเบดเบ‡")
(เบžเบดเบก "เบ™เบตเป‰เปเบกเปˆเบ™เบ–เป‰เบฒเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡"))

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบญเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบˆเบฐ if เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เบงเบฒเบกเบˆเบดเบ‡, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™
เบฎเปˆเบฒเบ‡เบเบฒเบเบ–เป‰เบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡, เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบฒเบก (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ!) เปเบกเปˆเบ™เบ–เป‰เบฒเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ (ie. เบญเบทเปˆเบ™).

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เบ—เปˆเบฒเบ™เบˆเบฐเบžเบปเบšเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบกเบต เป€เบญเบฅเบตเบŸ
เบกเบตเบขเบนเปˆเปƒเบ™ Hy. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบ—เปˆเบฒเบ™เบ„เบงเบ™เปƒเบŠเป‰เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบ‚เบปเป‰เบ™. เปƒเบ™ Python, เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”
เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:

somevar = 33
เบ–เป‰เบฒ somevar > 50:
เบžเบดเบก "เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เปƒเบซเบเปˆเป€เบเบตเบ™เป„เบ›!"
elif somevar < 10:
เบžเบดเบก "เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เบ™เป‰เบญเบเป€เบเบตเบ™เป„เบ›!"
เบญเบทเปˆเบ™:
เบžเบดเบก "เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡!"

เปƒเบ™ Hy, เป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบฎเบฑเบ”:

(เบ‚เปเป‰
[(> somevar 50)
(เบžเบดเบก "เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เปƒเบซเบเปˆเป€เบเบตเบ™เป„เบ›!")]
[(< somevar 10)
(เบžเบดเบก "เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เบ™เป‰เบญเบเป€เบเบตเบ™เป„เบ›!")]
[เบˆเบดเบ‡
(เบžเบดเบก "เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡!")])

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒ เบ‚เบปเป‰เบ™ เบ›เบดเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบฅเบฐ
เบเบงเบ”เบชเบญเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบซเบผเบทเบœเบดเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบกเบฑเบ™ turns
เบญเบญเบโ€‹เป„เบ›โ€‹เป€เบ›เบฑเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡. เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒ เบญเบทเปˆเบ™ เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเป‚เบ”เบ
เบเบฒเบ™เบเบงเบ”เบชเบญเบš เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ -- เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™โ€‹เบเป‰เบญเบ™โ€‹เบงเปˆเบฒ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡โ€‹เบชเบฐโ€‹เป€เบซเบกเบตโ€‹เป„เบ›โ€‹, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เป„เบ›โ€‹เป„เบโ€‹เบ™เบตเป‰โ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹
เปเบฅเปˆเบ™เบญเบฑเบ™เบ™เบฑเป‰เบ™เบชเบฐเป€เปเบต!

เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบฅเบฐเบซเบฑเบ”เป€เบŠเบฑเปˆเบ™:

(เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบšเบฒเบ‡โ€‹เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚โ€‹
(เบฎเปˆเบฒเบ‡เบเบฒเบ-เบ–เป‰เบฒ-เบˆเบดเบ‡)
(เบฎเปˆเบฒเบ‡เบเบฒเบ-เบ–เป‰เบฒ-เบœเบดเบ”))

เปเบ•เปˆเบฅเปเบ–เป‰เบฒ! เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเบเปˆเบงเบฒเบซเบ™เบถเปˆเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡
เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰?

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

(เบ–เป‰เบฒ (เบžเบฐเบเบฒเบเบฒเบกเบšเบฒเบ‡เบญเบฑเบ™)
(เป€เบฎเบฑเบ”
(เบžเบดเบก "เบ™เบตเป‰เปเบกเปˆเบ™เบ–เป‰เบฒเป€เบ›เบฑเบ™เบˆเบดเบ‡")
(เบžเบดเบก "เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆ, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบ•เปเปˆเป„เบ›เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบ™เบงเปƒเบ”!))
(เบžเบดเบก "เบญเบฑเบ™เบ™เบตเป‰เบเบฑเบ‡เบžเบฝเบ‡เปเบ•เปˆเบ›เบญเบก"))

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ do เป€เบžเบทเปˆเบญเบซเปเปˆเบซเบผเบฒเบเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™
Lisps, เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบ‚เบญเบ‡ เบ„เบฒเบ” เบขเบนเปˆเบšเปˆเบญเบ™เบญเบทเปˆเบ™.

เบ„เบณเป€เบซเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”:

(เบžเบดเบก "เบ™เบตเป‰เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™")
; (เบžเบดเบก "เปเบ•เปˆเบ™เบตเป‰เบˆเบฐเบšเปเปˆ")
(+ 1 2 3); เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบžเบตเปˆเบก, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเป€เบซเบฑเบ™เบ™เบตเป‰!

Looping เบšเปเปˆเบเบฒเบเปเบ•เปˆเบกเบตเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบดเป€เบชเบ”. เปƒเบ™ Python, เบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”:

เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบเปƒเบ™ เบฅเบฐเบ”เบฑเบš(10):
เบžเบดเบก "'i' เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเบ—เบตเปˆ " + str(i)

เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเปƒเบ™ Hy เบˆเบฐเป€เบ›เบฑเบ™:

(เบชเบณเบฅเบฑเบš [i (เบŠเปˆเบงเบ‡ 10)]
(เบžเบดเบก (+ "'i' เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเบ—เบตเปˆ " (str i))))

เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Python เบ•เปˆเบฒเบ‡เป†. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

(เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เป€เบ‚เบปเป‰เบฒ osโ€‹)

(เบ–เป‰เบฒ (os.path.isdir "/tmp/somedir")
(os.mkdir "/tmp/somedir/anotherdir")
(เบžเบดเบก "Hey, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบกเบต!"))

เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบšเปเบฅเบดเบšเบปเบ”เบ‚เบญเบ‡ Python (เบเบฑเบš เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™) เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

(เบเบฑเบš [[f (เป€เบ›เบตเบ” "/tmp/data.in")]]
(เบžเบดเบก (. เบญเปˆเบฒเบ™ f)))

เป€เบŠเบดเปˆเบ‡เป€เบ—เบปเปˆเบฒเบเบฑเบš:

เบ”เป‰เบงเบ open("/tmp/data.in") เป€เบ›เบฑเบ™ f:
เบžเบดเบก f.read()

เปเบฅเบฐเปเบกเปˆเบ™เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบฅเบฒเบเบŠเบทเปˆเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆ! เปƒเบ™ Python เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”:

odds_squared = [
pow(เบ•เบปเบงเป€เบฅเบ, 2)
เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเป€เบฅเบเปƒเบ™ เบฅเบฐเบ”เบฑเบš(100โ€‹)
เบ–เป‰เบฒเบ•เบปเบงเป€เบฅเบ %2 == 1]

เปƒเบ™ Hy, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบŠเบฑเปˆเบ™:

(setv odds-squared
(list-comp
(เป€เบฅเบ 2)
(เบ•เบปเบงเป€เบฅเบ (เป„เบฅเบเบฐ 100))
(= (% เป€เบฅเบ 2) 1)))

; เปเบฅเบฐ, เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบฅเบฑเบเบขเปˆเบฒเบ‡เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบญเบฑเบšเบญเบฒเบเบˆเบฒเบเบซเบ™เป‰เบฒ Clojure:
; เปƒเบซเป‰เบšเบญเบเบฅเบฒเบเบŠเบทเปˆเบ—เปˆเบญเบ™เป„เบกเป‰เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™เปเบฒเบเบฎเบธเบ:

(list-comp
(, 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, 'F'), (1. , 'G'), (XNUMX, 'H'),
; (2, 'A'), (2, 'B'), (2, 'C'), (2, 'D'), (2, 'E'), (2, 'F'), (2, 'F'), (2. , 'G'), (XNUMX, 'H'),
; (3, 'A'), (3, 'B'), (3, 'C'), (3, 'D'), (3, 'E'), (3, 'F'), (3, 'F'), (3. , 'G'), (XNUMX, 'H'),
; (4, 'A'), (4, 'B'), (4, 'C'), (4, 'D'), (4, 'E'), (4, 'F'), (4, 'F'), (4. , 'G'), (XNUMX, 'H'),
; (5, 'A'), (5, 'B'), (5, 'C'), (5, 'D'), (5, 'E'), (5, 'F'), (5, 'F'), (5. , 'G'), (XNUMX, 'H'),
; (6, 'A'), (6, 'B'), (6, 'C'), (6, 'D'), (6, 'E'), (6, 'F'), (6, 'F'), (6. , 'G'), (XNUMX, 'H'),
; (7, 'A'), (7, 'B'), (7, 'C'), (7, 'D'), (7, 'E'), (7, 'F'), (7, 'F'), (7. , 'G'), (XNUMX, 'H')]

Python เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ fancy เบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ„เปเบฒเบซเบฅเบฑเบ. เปƒเบ™ Python เบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐ
เป€เบšเบดเปˆเบ‡:

>>> def optional_arg(pos1, pos2, keyword1=None, keyword2=42):
... เบเบฑเบšเบ„เบทเบ™ [pos1, pos2, keyword1, keyword2]
...
>>> optional_arg(1, 2)
[1, 2, เบšเปเปˆเบกเบต, 42]
>>> optional_arg(1, 2, 3, 4)
[1, 2, 3, 4]
>>> optional_arg(keyword1=1, pos2=2, pos1=3, keyword2=4)
[3, 2, 1, 4]

เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เปƒเบ™ Hy:

=> (defn optional-arg [pos1 pos2 &optional keyword1 [keyword2 42]]
... [pos1 pos2 keyword1 keyword2])
=> (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ-arg 1 2)
[1 2 เบšเปเปˆโ€‹เบกเบต 42โ€‹]
=> (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ-arg 1 2 3 4)
[1 2 3 4]

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡ Hy past 0.10.1 (เป€เบŠเบฑเปˆเบ™: git master), เบกเบฑเบ™เบเปเปˆเบกเบตเบญเบฑเบ™เปƒเบซเบกเปˆเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก.
syntax argument เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™:

=> (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ-arg :keyword1 1
... :pos2 2
... :pos1 3
... :keyword2 4)
[3, 2, 1, 4]

เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เบ•เบฐเบซเบผเบญเบ”เป€เบงเบฅเบฒ เบ™เปเบฒเปƒเบŠเป‰. เปเบ•เปˆเปเบกเปˆเบ™เบซเบเบฑเบ‡ เบ™เปเบฒเปƒเบŠเป‰?

เบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบเบฒเบ™เบœเปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒ *args เปเบฅเบฐ **เบเบญเบ‡ เปƒเบ™ Python?:

>>> args = [1 2]
>>> kwargs = {"keyword2": 3
... "keyword1": 4}
>>> optional_arg(*args, **kwargs)

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปเบœเปˆเบžเบฑเบ™เบ™เบตเป‰เบ”เป‰เบงเบ เบ™เปเบฒเปƒเบŠเป‰:

=> (setv args [1 2])
=> (setv kwargs {"keyword2" 3
... "keyword1" 4})
=> (เบ™เบณเปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบ-arg args kwargs)
[1, 2, 4, 3]

เบ™เบญเบเบ™เบฑเป‰เบ™เบเบฑเบ‡เบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ„เปเบฒเบซเบฅเบฑเบเปเบšเบšเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ„เป‰เบฒเบเบ„เบท:

(defn เบฎเบนเบšเปเบšเบšเบญเบทเปˆเบ™ [&key {"key1" "val1" "key2" "val2"}]
[key1 key2])

เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเบตเบ‡เปƒเบชเปˆเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบ™เบถเปˆเบ‡
เบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡.

Hy เบเบฑเบ‡เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ *args เปเบฅเบฐ **เบเบญเบ‡. เปƒเบ™ Python:

def some_func(foo, bar, *args, **kwargs):
เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ pprint
pprint.pprint((foo, bar, args, kwargs))

เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ Hy:

(defn some-func [foo bar &rest args &kwargs kwargs]
(เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ pprint)
(pprint.pprint(, foo bar args kwargs)))

เบชเบธเบ”เบ—เป‰เบฒเบ, เปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™! เปƒเบ™ Python, เบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเบกเบตเบซเป‰เบญเบ‡เบฎเบฝเบ™เป€เบŠเบฑเปˆเบ™:

เบซเป‰เบญเบ‡เบฎเบฝเบ™ FooBar(เบงเบฑเบ”เบ–เบธ):
"" "" ""
เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เบญเบตเบ
"" "" ""
def __init__(เบ•เบปเบ™เป€เบญเบ‡, x):
self.x = x

def get_x(เบ•เบปเบ™เป€เบญเบ‡):
"" "" ""
เบเบฑเบšเบ„เบทเบ™เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ x
"" "" ""
เบเบฑเบšเบ„เบทเบ™เบ•เบปเบ™เป€เบญเบ‡.x

เปƒเบ™ Hy:

(defclass FooBar [object]
"เบŠเบฑเป‰เบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡"
[[--เปƒเบ™โ€‹เบกเบฑเบ™--
(fn [เบ•เบปเบ™เป€เบญเบ‡ x]
(setv self.xx)
; เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš --init-- เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ __init__ เบ•เป‰เบญเบ‡เบเบฒเบ™เบšเปเปˆเบกเบต
; เบซเบงเบฑเบ‡เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบซเบฒเบเป„เบ› :)
เบšเปเปˆเบกเบต)]

[เป„เบ”เป‰-x
(fn [เบ•เบปเบ™เป€เบญเบ‡]
"เบชเบปเปˆเบ‡เบ„เบทเบ™เบชเปเบฒเป€เบ™เบปเบฒ x เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ"
self.x)]])

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบฅเบฐเบ”เบฑเบšเบŠเบฑเป‰เบ™เบฎเบฝเบ™เป„เบ”เป‰. เปƒเบ™ Python:

เบฅเบนเบโ€‹เบ„เป‰เบฒโ€‹เบŠเบฑเป‰เบ™โ€‹เบฎเบฝเบ™ (model.Model):
name=models.CharField(max_length=255)
เบ—เบตเปˆเบขเบนเปˆ =models.TextField()
note=models.TextField()

เปƒเบ™ Hy:

(defclass เบฅเบนเบเบ„เป‰เบฒ [model.Model]
[[เบŠเบทเปˆ (เป‚เบกเป€เบ”เบง.CharField :max-length 255})]
[เบ—เบตเปˆเบขเบนเปˆ (models.TextField)]
[เบšเบฑเบ™เบ—เบถเบ (model.TextField)]])

Hy <-> Python interop
เป‚เบ”เบเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ Hy, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Hy เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบ Python!

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ เบ—เบฑเบเบ—เบฒเบ.hy:

(defn เบ—เบฑเบเบ—เบฒเบ [เบŠเบทเปˆ] (เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเบˆเบฒเบ hy," เบŠเบทเปˆ))

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบ python, เป‚เบ”เบเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ hy เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเป‚เบกเบ”เบนเบ™. เปƒเบ™
python:

เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ hy
เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบ„เปเบฒเบŠเบปเบกเป€เบŠเบตเบ

greetings.greet("Foo")

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบฒเบ”เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™ python (เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡ class!) เปเบฅเบฐเปƒเบŠเป‰เบกเบฑเบ™เปƒเบ™ Hy!

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ เบ—เบฑเบเบ—เบฒเบ.py เปƒเบ™ Python:

def เบ—เบฑเบเบ—เบฒเบ(เบŠเบทเปˆ):
เบžเบดเบก("เบชเบฐเบšเบฒเบเบ”เบต, %s" % (เบŠเบทเปˆ))

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบกเบฑเบ™โ€‹เปƒเบ™ Hyโ€‹:

(เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบŠเบปเบกโ€‹เป€เบŠเบตเบโ€‹)
(.เบ—เบฑเบเบ—เบฒเบเบ—เบฑเบเบ—เบฒเบ "foo")

เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ„เปเบฒเบซเบฅเบฑเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ เบ—เบฑเบเบ—เบฒเบ.py:

def เบ—เบฑเบเบ—เบฒเบ(เบŠเบทเปˆ, title="Sir"):
print("เบชเบฐเบšเบฒเบเบ”เบต, %s %s" % (เบŠเบทเปˆ,เบŠเบทเปˆ))

(เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบŠเบปเบกโ€‹เป€เบŠเบตเบโ€‹)
(.เบ—เบฑเบเบ—เบฒเบเบ—เบฑเบเบ—เบฒเบ "Foo")
(.เบ—เบฑเบเบ—เบฒเบ "Foo" "Darth")
(apply (. greetings greet) ["Foo"] {"title" "เบžเบฃเบฐโ€‹เบœเบนเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบˆเบปเป‰เบฒ"})

เบŠเบถเปˆเบ‡เบˆเบฐเบญเบญเบ:

เบŠเบปเบกเป€เบŠเบตเบ, เบ—เปˆเบฒเบ™ Foo

เบŠเบปเบกเป€เบŠเบตเบ, Darth Foo

เบŠเบปเบกเป€เบŠเบตเบ, เบžเบฃเบฐเบœเบนเป‰เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒ Foo

เป€เบ„เบฑเบ”เบฅเบฑเบš!
Hy เบเบฑเบ‡เบกเบตเบšเบฒเบ‡เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "เบกเบฐเบซเบฒเบžเบฒเบเบเบฐเบ—เบนเป‰", เป€เบ›เบฑเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเบฐเบญเบฒเบ”เปเบ—เป‰เป†
Clojure เบ‚เบญเบ‡. "เบกเบฐเบซเบฒเบžเบฒเบเบเบฐเบ—เบนเป‰" (เบ‚เบฝเบ™เป€เบ›เบฑเบ™ ->) เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบฎเบฑเบ‡เป€เบฅเบดเบเบ‚เบญเบ‡
เบชเบณ เบ™เบงเบ™.

macro threading เปเบŠเบเปเบ•เปˆเบฅเบฐ expression เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ argument เบ—เบณเบญเบดเบ”เบ‚เบญเบ‡ expression เบ•เปเปˆเป„เบ›
เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ.

เป€เบญเบปเบฒเปเบšเบšเบ„เบฅเบฒเบชเบชเบดเบ:

(loop (เบžเบดเบก (eval (เบญเปˆเบฒเบ™))))

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เปเบšเบšเบ™เบฑเป‰เบ™, เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เบ”เบฑเปˆเบ‡เบ™เบตเป‰:

(-> (เบญเปˆเบฒเบ™) (eval) (เบžเบดเบก) (เบงเบปเบ‡))

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ python-sh, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™ macro threading (เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ 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")

เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบ, เบšเปเปˆเปเบกเปˆเบ™เบšเป? เปƒเบŠเป‰ macro threading!

HY STYLE GUIDE


"เป€เบˆเบปเป‰เบฒเบฎเบนเป‰, เบฅเบฑเบ”เบ–เบฐเบกเบปเบ™เบ•เบต, เบ‚เป‰เบญเบเบšเปเปˆเป€เบซเบฑเบ™เบ”เบตเบเบฑเบš Dumbledore เปƒเบ™เบซเบผเบฒเบเป†เบ‚เปเป‰ ... เปเบ•เปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเป€เบชเบ”เบฅเบฒเบง.
เป„เบ”เป‰เบฎเบนเบšเปเบšเบšโ€ฆโ€ โ€” Phineas Nigellus Black, Harry Potter เปเบฅเบฐ เป„เบ”เป‰ เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡ of เป„เบ”เป‰ Phoenix

เบ„เบนเปˆเบกเบทเปเบšเบš Hyve เบ•เบฑเป‰เบ‡เปƒเบˆเป€เบ›เบฑเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบš Hyve (เปเบกเปˆเบ™เปเบฅเป‰เบง, เบŠเบธเบกเบŠเบปเบ™ Hy
prides เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก Hy เบเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡) เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ” Hy idiomatic. Hy เบกเบฒเบˆเบฒเบเบซเบผเบฒเบ
เบˆเบฒเบ Clojure & Common Lisp, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฎเบฑเบเบชเบฒ Python interopability เบขเบนเปˆเบชเบฐเป€เปเบต.

prelude
เป„เบ”เป‰ เบ•เบฒเบง of Hy
เบญเบนเบกเบกเบญเบ™เบ–เบฒเบกเบžเบฐเบซเบปเบงเบงเปˆเบฒ, "เป€เบˆเบปเป‰เบฒเบเบณเบฅเบฑเบ‡เบšเบฑเบ™เบเบฒเบเป€เบฅเบทเปˆเบญเบ‡เบซเบเบฑเบ‡?"
"เบžเบฃเบฐเบ™เบดเบšเบžเบฒเบ™ Sutra."
"เบžเบฃเบฐเบ™เบดเบšเบžเบฒเบ™เบกเบตเบžเบฃเบฐเบ—เบฑเบก XNUMX เบญเบฑเบ™, เบšเปเปˆเปเบกเปˆเบ™เบšเป?"
"เบกเบฑเบ™โ€‹เบกเบต."
Ummon เบ–เบฒเบก, เป€เบญเบปเบฒเบˆเบญเบเบ‚เบถเป‰เบ™, "เบกเบตเบ„เบธเบ™เบ‡เบฒเบกเบ„เบงเบฒเบกเบ”เบตเบซเบผเบฒเบเบญเบฑเบ™เบ™เบตเป‰?"
"เบšเปเปˆเบกเบตเป€เบฅเบตเบ," เบžเบฃเบฐเบชเบปเบ‡เบเปˆเบฒเบง.
"เปเบ•เปˆเบ„เบปเบ™เบšเบนเบฎเบฒเบ™เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เบกเบต, เบšเปเปˆเปเบกเปˆเบ™เบšเป?" Ummon เบเปˆเบฒเบง.
"เป€เบˆเบปเป‰เบฒเบ„เบดเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒ?"
Ummon เบ•เบตเบˆเบญเบเปเบฅเบฐเบ–เบฒเบกเบงเปˆเบฒ, "เป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเป?"
โ€œเบšเปเปˆ,โ€ เบžเบฃเบฐเบชเบปเบ‡เป€เบงเบปเป‰เบฒ.
"เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™," Ummon เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, "เบ—เปˆเบฒเบ™เบ„เบงเบ™เบˆเบฐเบชเบทเบšเบ•เปเปˆเบเบฒเบ™เบšเบฑเบ™เบเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš sutra."
โ€” เบกเบฐเบซเบฒเบžเบฒเบ (koan).

เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบซเบเปเป‰เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบญเบญเบเปเบšเบšเบ—เบตเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบญเบ‡
เบฎเบด.

ยท เป€เบšเบดเปˆเบ‡เบ„เบท Lisp; DTRT เบเบฑเบšเบกเบฑเบ™ (เป€เบŠเบฑเปˆเบ™: dashes เบซเบฑเบ™เป„เบ›เบซเบฒ underscores, earmuffs เบซเบฑเบ™เป„เบ›เบซเบฒ
all-caps).

ยทเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป€เบ›เบฑเบ™ Python. เบžเบฒเบเปƒเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบ› 1:1 เป€เบ›เบฑเบ™ Python เบžเบฒเบเปƒเบ™.

ยท เปƒเบŠเป‰ Unicode เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡.

ยท เปเบเป‰เป„เบ‚เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบšเปเปˆเบ”เบตเปƒเบ™ Python 2 เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ (เป€เบšเบดเปˆเบ‡ true_division).

ยท เป€เบกเบทเปˆเบญเบชเบปเบ‡เปƒเบช, เบเบฐเบฅเบธเบ™เบฒเป€เบฅเบทเปˆเบญเบ™เป„เบ›เบ—เบตเปˆ Python.

ยท เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเบฑเบ‡เบšเปเปˆเปเบ™เปˆเปƒเบˆ, เปƒเบซเป‰เป€เบฅเบทเปˆเบญเบ™เป„เบ›เบ—เบตเปˆ Clojure.

ยท เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเปเบ™เปˆเปƒเบˆเบซเบผเบฒเบ, เปƒเบซเป‰เป€เบฅเบทเปˆเบญเบ™เป„เบ›เบ—เบตเปˆ Common Lisp.

ยท เบˆเบปเปˆเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปเบกเปˆเบ™ Clojure. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปเบกเปˆเบ™ Lisp เบ—เบปเปˆเบงเป„เบ›. เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™ Homoiconic Python, เบเบฑเบš
เบšเบดเบ”เบžเบดเป€เบชเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบ.

Layout & เบซเบเปเป‰ เปœเป‰เบฒ
ยท เบซเบผเบตเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹. เบžเบงเบเป€เบ‚เบปเบฒเบ”เบนเบ”!

ยท เบเบฒเบ™เบซเบเปเป‰เปœเป‰เบฒเบˆเบฐเป€เบ›เบฑเบ™ 2 เบŠเปˆเบญเบ‡ (เบšเปเปˆเบกเบตเปเบ–เบšเปเบ‚เบ‡), เบเบปเบเป€เบงเบฑเป‰เบ™เป€เบกเบทเปˆเบญเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบซเบเปเป‰เปœเป‰เบฒเบ‚เบญเบ‡
เปเบ–เบงเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ.

;; เบ”เบต (เปเบฅเบฐเบกเบฑเบ)
(defn fib [n]
(เบ–เป‰เบฒ (<= n 2)
n
(+ (fib (- เบ™ 1)) (fib (- เบ™ 2))))))

;; เบเบฑเบ‡เบšเปเปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡
(defn fib [n]
(เบ–เป‰เบฒ (<= n 2) n (+ (fib (- n 1))) (fib (- n 2))))))

;; เบเบฑเบ‡เบšเปเปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡
(defn fib [n]
(เบ–เป‰เบฒ (<= n 2)
n
(+ (fib (- เบ™ 1)) (fib (- เบ™ 2))))))

;; เบ‚เบตเป‰เบ„เป‰เบฒเบ™เบ‚เบตเป‰เบ„เป‰เบฒเบ™
(defn fib [n]
(เบ–เป‰เบฒ (<= n 2)
n ;; เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ‚เป‰เบญเบเบกเบฑเบเบเบฒเบ™เบ•เบตเบเบฐเปเบˆเบŠเปˆเบญเบ‡เปเบšเบšเบชเบธเปˆเบก
(+ (fib (- เบ™ 1)) (fib (- เบ™ 2))))))

ยท เบงเบปเบ‡เป€เบฅเบฑเบšเบ•เป‰เบญเบ‡ เบšเปเปˆเป€เบ„เบตเบ เบ–เบทเบเบ›เบฐเป„เบงเป‰เบขเบนเปˆเบ„เบปเบ™เบ”เบฝเบง, เป‚เบชเบเป€เบชเบปเป‰เบฒเปเบฅเบฐเป‚เบ”เบ”เบ”เปˆเบฝเบงเบขเบนเปˆเปƒเบ™เบชเบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

;; เบ”เบต (เปเบฅเบฐเบกเบฑเบ)
(defn fib [n]
(เบ–เป‰เบฒ (<= n 2)
n
(+ (fib (- เบ™ 1)) (fib (- เบ™ 2))))))

;; เบ‚เบตเป‰เบ„เป‰เบฒเบ™เบ‚เบตเป‰เบ„เป‰เบฒเบ™
(defn fib [n]
(เบ–เป‰เบฒ (<= n 2)
n
(+ (fib (- เบ™ 1)) (fib (- เบ™ 2)))
)
); GAH, เป€เบœเบปเบฒเบกเบฑเบ™เบ”เป‰เบงเบเป„เบŸ

ยท เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเปเบ™เบงเบ•เบฑเป‰เบ‡ เปƒเบซเป‰ เบ•เบฑเบ™.

(เปƒเบซเป‰ [[foo (bar)]
[qux (baz)]]
(foo qux))

ยท เบ„เบณเป€เบซเบฑเบ™เปƒเบ™เปเบ–เบงเบˆเบฐเป€เบ›เบฑเบ™เบชเบญเบ‡เบŠเปˆเบญเบ‡เบˆเบฒเบเบ—เป‰เบฒเบเบฅเบฐเบซเบฑเบ”; เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฐเป€เบซเบกเบตเบ•เป‰เบญเบ‡เบกเบต
เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ„เบณเป€เบซเบฑเบ™ เปเบฅเบฐเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ„เบณเป€เบซเบฑเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบฐเบเบฒเบเบฒเบกเบšเปเปˆ
เบ„เปเบฒโ€‹เป€เบซเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เปเบˆเป‰เบ‡โ€‹.

;; เบ”เบต
(setv ind (dec x)); เบ”เบฑเบ”เบชเบฐเบ™เบตเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบ 0

;; เบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบชเบฐเป„เบ•เบฅเปŒ เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบšเบธเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™
(setv ind (dec x)); เบ•เบฑเป‰เบ‡เบ”เบฑเบ”เบŠเบฐเบ™เบตเป€เบ›เบฑเบ™ x-1

;; เบšเปเปˆเบ”เบต
(setv ind (dec x));เบžเบดเบกเบ„เบณเบชเบฑเบšเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบกเปˆเบงเบ™เบŠเบทเปˆเบ™

เบฅเบฐเบซเบฑเบ” เปเบšเบš
ยท เป€เบ›เบฑเบ™เบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒ, เบžเบฐเบเบฒเบเบฒเบกเบšเปเปˆเปƒเบŠเป‰ def เบชเปเบฒเบฅเบฑเบšเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบ™เบญเบเบˆเบฒเบเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ; เปƒเบŠเป‰ เบŠเบธเบ”
เบžเบฒเบเปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™, loops, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

;; เบ”เบต (เปเบฅเบฐเบกเบฑเบ)
( def * เบˆเปเบฒเบเบฑเบ” * 400000 )

(defn fibs [ab]
(เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡
(เบœเบปเบ™เบœเบฐเบฅเบดเบ” เบ)
(setv (, ab) (, b (+ ab)))))

;; เบšเปเปˆเบ”เบต (เปเบฅเบฐเบšเปเปˆเบกเบฑเบ)
(defn fibs [ab]
(เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡
(เบœเบปเบ™เบœเบฐเบฅเบดเบ” เบ)
(def (, ab) (, b (+ ab)))))

ยท เบขเปˆเบฒเปƒเบŠเป‰ syntax s-expression เบšเปˆเบญเบ™เบ—เบตเปˆ syntax vector เปเบกเปˆเบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ„เบงเบฒเบกเบˆเบดเบ‡
เบงเปˆเบฒเบญเบฐเบ”เบตเบ”เบ‚เบญเบ‡เบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเบžเบฝเบ‡เปเบ•เปˆเบเป‰เบญเบ™เบงเปˆเบฒ compiler เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบเบตเบ™เป„เบ›
เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, syntax เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ.

;; เบšเปเปˆเบ”เบต (เปเบฅเบฐเบŠเบปเปˆเบง)
(defn foo (x) (เบžเบดเบก x))
(foo 1)

;; เบ”เบต (เปเบฅเบฐเบกเบฑเบ)
(defn foo [x] (เบžเบดเบก x))
(foo 1)

ยท เบ™เบณเปƒเบŠเป‰ macro threading เบซเบผเบท threading tail macro เป€เบกเบทเปˆเบญเบžเบปเบšเบเบฑเบšเบเบฒเบ™เบเบฑเบ‡เป€เบฅเบดเบ
s-เบชเบฐเปเบ”เบ‡เบญเบญเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบตเบ„เบงเบฒเบกเบเบธเบ•เบดเบ—เปเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ™เปเบฒเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™. เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐ
readability เบ›เบฑเบšเบ›เบธเบ‡; เบšเปเปˆเบชเป‰เบฒเบ‡ convoluted, เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเปเบฒเบ™เบงเบ™.

;; เบ•เป‰เบญเบ‡เบเบฒเบ™
( def * เบŠเบทเปˆ *
(เบเบฑเบš [f (เป€เบ›เบตเบ” "names.txt")]
(-> (.read f) (.strip) (.replace "\"" "") (.split ",") (เบˆเบฑเบ”เบฎเบฝเบ‡))))

;; เบšเปเปˆเบ”เบตเบ›เบฒเบ™เปƒเบ”
( def * เบŠเบทเปˆ *
(เบเบฑเบš [f (เป€เบ›เบตเบ” "names.txt")]
(เบˆเบฑเบ”เบฎเบฝเบ‡ (.split "," (. เปเบ—เบ™เบ—เบตเปˆ "\"" "" (.strip (.read f)))))))

;; เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบต
( defn square? [x]
(->> 2 (pow (int (sqrt x))) (= x)))

ยท เบเบฒเบ™เปเบฒเบเบˆเบธเบ”เปเบšเบš Clojure เปเบกเปˆเบ™เบกเบฑเบเบซเบผเบฒเบเบเบงเปˆเบฒเบเบฒเบ™เป€เบญเบตเป‰เบ™เป‚เบ”เบเบเบปเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ,
เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบˆเบฐเบชเบทเบšเบ•เปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.

;; เบ”เบต
(เบเบฑเบš [fd (เป€เบ›เบตเบ” "/ etc / passwd")]
(เบžเบดเบก (.readlines fd)))

;; เบšเปเปˆเบ”เบตเบ›เบฒเบ™เปƒเบ”
(เบเบฑเบš [fd (เป€เบ›เบตเบ” "/ etc / passwd")]
(เบžเบดเบก (fd.readlines)))

เบชเบฐเบซเบผเบธเบš
โ€œเปเบŸเบŠเบฑเบ™เบˆเบฐเบซเบฒเบเป„เบ›, เปเบšเบšเป€เบ›เบฑเบ™เบ™เบดเบฅเบฑเบ™เบ”เบญเบ™โ€โ€”Yves Saint Laurent

เบ„เบนเปˆเบกเบทเบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบŠเบธเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เบŠเบธเบกเบŠเบปเบ™, เปเบฅเบฐเปเบ™เปˆเบ™เบญเบ™, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เบŠเบธเบกเบŠเบปเบ™เป€เบฎเบฑเบ”
เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเป‚เบ”เบเบšเปเปˆเบกเบตเบŠเบธเบกเบŠเบปเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบเบฒเบ™เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เปเบกเปˆเบ™เบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบš. เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆ #hy in
freenode, blog เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™, tweet เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™, เปเบฅเบฐเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”, เบกเบตเบ„เบงเบฒเบกเบกเปˆเบงเบ™เบเบฑเบš Hy.

เบ‚เปเบ‚เบญเบšเปƒเบˆ
ยท เบ„เบนเปˆเบกเบทเบ™เบตเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบปเบ™เปƒเบˆเบซเบผเบฒเบเบˆเบฒเบ @paultag เบ•เบญเบš blog เบ‚เบญเบ‡ Hy เบเบฒเบ™เบขเบนเปˆเบฅเบญเบ” เบ„เบนเปˆโ€‹เบกเบท

ยทเบ— Clojure เปเบšเบš เบ„เบนเปˆโ€‹เบกเบท

เป€เบญเบเบฐเบชเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡ INDEX


เป€เบ™เบทเป‰เบญเปƒเบ™:

เบ„เปเบฒเบชเบฑเปˆเบ‡ เบญเบญเบ™เป„เบฅเบ™เปŒ เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš
hy
เบ„เปเบฒเบชเบฑเปˆเบ‡ เบญเบญเบ™เป„เบฅเบ™เปŒ เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™
-c
เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ” Hy เปƒเบ™ เบ„เปเบฒเบชเบฑเปˆเบ‡.

$ hy -c "(เบžเบดเบก (+ 2 2))"
4

-i
เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ” Hy เปƒเบ™ เบ„เปเบฒเบชเบฑเปˆเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™ REPL.

-m
เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ” Hy เปƒเบ™ เป‚เบกเบ”เบนเบ™, เบฅเบงเบกเบ—เบฑเบ‡ defmain เบ–เป‰เบฒเบเปเบฒเบ™เบปเบ”.

เป„เบ”เป‰ -m เบ—เบธเบ‡เบขเบธเบ”เบฅเบฒเบเบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบซเบผเบฑเบ‡เบˆเบฒเบ เป‚เบกเบ”เบนเบ™ เบŠเบทเปˆ
เบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเป‚เบกเบ”เบนเบ™เปƒเบ™ sys.argv.

เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.2.

--Spy เบžเบดเบกเบฅเบฐเบซเบฑเบ” Python เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

=> (defn salutationsnm [เบŠเบทเปˆ] (เบžเบดเบก (+ "Hy "เบŠเบทเปˆ "!")))
def salutationsnm(เบŠเบทเปˆ):
เบžเบดเบกเบ„เบทเบ™ (((u'Hy ' + เบŠเบทเปˆ) + u'!'))
=> (เบ„เปเบฒเบŠเบปเบกเป€เบŠเบตเบ "เบŠเบทเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ")
เบ„เบณเบŠเบปเบกเป€เบŠเบตเบnm(u'เบŠเบทเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ')
เบŠเบทเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ!
=>

เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.11.

--show-tracebacks
เบžเบดเบก tracebacks เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเป€เบงเบฑเป‰เบ™ Hy.

เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

-v เบžเบดเบกเปเบฒเบเป€เบฅเบเบฅเบธเป‰เบ™ Hy เปเบฅเบฐเบญเบญเบ.

hyc
เบ„เปเบฒเบชเบฑเปˆเบ‡ เบญเบญเบ™เป„เบฅเบ™เปŒ เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™
เป„เบŸเบฅเปŒ[, fileN]
เบฅเบงเบšเบฅเบงเบกเบฅเบฐเบซเบฑเบ” Hy เบเบฑเบš Python bytecode. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฑเบ™เบ—เบถเบเบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบ›เบฑเบ™
hyname.hy:

(defn hy-hy [เบŠเบทเปˆ]
(เบžเบดเบก (+ "Hy "เบŠเบทเปˆ "!")))

(hy-hy "Afroman")

เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบฅเปˆเบ™:

$ hyc hyname.hy
$ python hyname.pyc
เบญเบตเปˆเบญเบฒเป‚เบŸเบฃเปเบกเบ™!

hy2py
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.1.

เบ„เปเบฒเบชเบฑเปˆเบ‡ เบญเบญเบ™เป„เบฅเบ™เปŒ เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™
-s

--with-source
เบชเบฐเปเบ”เบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบงเบดเป€เบ„เบฒเบฐเปเบฅเป‰เบง.

-a

--with-ast
เบชเบฐเปเบ”เบ‡ AST เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.

-e.g

-- เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ python
เบขเปˆเบฒเบชเบฐเปเบ”เบ‡เบฅเบฐเบซเบฑเบ” Python เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบˆเบฒเบ AST.

Hy (เป„เบ”เป‰ เบžเบฒเบชเบฒ)
เบ„เปเบฒเป€เบ•เบทเบญเบ™:
เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบ„เบปเบšเบ–เป‰เบงเบ™; เบเบฐเบฅเบธเบ™เบฒเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเป€เบญเบเบฐเบชเบฒเบ™.

เบ—เบดเบ”เบชเบฐเบ”เบต of Hy
Hy เบฎเบฑเบเบชเบฒ, เบซเบผเบฒเบเบเบงเปˆเบฒเบชเบดเปˆเบ‡เบญเบทเปˆเบ™, เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰ 100% เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบ—เบดเบ”เบ—เบฒเบ‡เบเบฑเบš Python
เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบฅเบฐเบซเบฑเบ” Hy เบ—เบฑเบ‡เปเบปเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‡เปˆเบฒเบเป†เบšเปเปˆเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”. เบˆเบทเปˆเป„เบงเป‰, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบ‚เบปเป‰เบฒเบกเบฒ
เบกเบตเบ›เบฐเป‚เบซเบเบ”.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบฅเบฐเบซเบฑเบ” Hy เปเบกเปˆเบ™ idiomatic เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบžเบฒเบชเบฒ.

ยท เบชเบฑเบ™เบเบฒเบฅเบฑเบเปƒเบ™ earmufs เบˆเบฐเบ–เบทเบเปเบ›เป€เบ›เบฑเบ™เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆเบ‚เบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡เบ™เบฑเป‰เบ™. เบชเปเบฒเบฅเบฑเบš
เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบŸเบน เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™ FOO.

ยท UTF-8 เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบˆเบฐเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ เบฅเบฐเบซเบฑเบ”เป‚เบ—เบ” เปเบฅเบฐเบ™เบณเปœเป‰เบฒเบ”เป‰เบงเบ hy_. เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡, โš˜
เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™ hy_w7h, โ™ฅ เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™ hy_g6h, เปเบฅเบฐ iโ™ฅu เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™ hy_iu_t0x.

ยท เบชเบฑเบ™โ€‹เบเบฒโ€‹เบฅเบฑเบโ€‹เบ—เบตเปˆโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบ dashes เบˆเบฐโ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ—เบปเบ”โ€‹เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ‚เบตเบ”โ€‹เบเป‰เบญเบ‡โ€‹. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,
render-เปเบกเปˆเปเบšเบš เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™ render_template. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบตเปˆเบกเบต dashes เบˆเบฐ
shadow เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ underscore เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™.

Built-Ins
Hy เบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบชเป‰เบฒเบ‡ Python AST เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.
เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบฎเบนเบšเปเบšเบš "เบžเบดเป€เบชเบ”", เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบกเบตเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™
เบšเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™.

.
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

. เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ. เบกเบฑเบ™เปƒเบŠเป‰ DSL เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเป€เบžเบทเปˆเบญเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป„เบง
เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” เปเบฅเบฐเบฅเบฒเบเบเบฒเบ™เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ•เบดเบ”เบเบฑเบ™.

เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

(. foo bar baz [(+ 1 2)] frob)

เบฅเบงเบšเบฅเบงเบกเบฅเบปเบ‡เป€เบ›เบฑเบ™:

foo.bar.baz[1+2].frob

. เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบกเบฑเบ™ (เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, เบŸเบน) เป€เบ›เบฑเบ™เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เป„เบ”เป‰
เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”. เบกเบฑเบ™เปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบฅเบฑเบเป€เบ›เบปเปˆเบฒเป€เบ›เบฑเบ™เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ (เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบฒเบ—เบฐเบ™เบฒเบเบ„เบงเบฒเบก,
เบ–เบฒเบ™, frob), เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบฅเบฒเบเบŠเบทเปˆ (เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, [(+ 1 2)]) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบต.
เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบญเบทเปˆเบ™เบ–เบดเป‰เบกเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเบ–เบดเป‰เบกเป€เบ›เบฑเบ™ เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบœเบดเบ”เบžเบฒเบ”. เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฐเปเบˆเบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเบ–เบดเป‰เบกเป€เบ›เบฑเบ™
เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ”เบฑเบ”เบŠเบฐเบ™เบต (เปƒเบ™เบฅเบฒเบเบเบฒเบ™ เปเบฅเบฐ tuples) เบซเบผเบท เบ เบœเบดเบ”เบžเบฒเบ” (เปƒเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก).

->
-> (or the เบเบฐเบ—เบนเป‰ เบกเบฐเบซเบฒเบžเบฒเบ) เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบฎเบฑเบ‡เบ‚เบญเบ‡เบชเปเบฒเบ™เบงเบ™. เบกเบฐเบซเบฒเบžเบฒเบเบเบฐเบ—เบนเป‰
เปเบŠเบเปเบ•เปˆเบฅเบฐ expression เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเปˆเบญเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบณเบญเบดเบ”เบ‚เบญเบ‡ expression เบ•เปเปˆเป„เบ›. เบ•เปเปˆเป„เบ›เบ™เบตเป‰
เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบ™เบตเป‰โ€‹:

=> (defn output [ab] (เบžเบดเบก ab))
=> (-> (+ 4 6) (เบœเบปเบ™เบœเบฐเบฅเบดเบ” 5))
10 5

- >>
- >> (or the เบเบฐเบ—เบนเป‰ เบซเบฒเบ‡ เบกเบฐเบซเบฒเบžเบฒเบ) เปเบกเปˆเบ™โ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹ เบเบฐเบ—เบนเป‰ เบกเบฐเบซเบฒเบžเบฒเบ, เปเบ•เปˆเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ
เบเบฒเบ™เปƒเบชเปˆเปเบ•เปˆเบฅเบฐเบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ•เปเปˆเป„เบ›, เบกเบฑเบ™เบ•เบทเปˆเบกเบกเบฑเบ™เปƒเบชเปˆ
เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบชเบธเบ”เบ—เป‰เบฒเบ. เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ™เบตเป‰:

=> (defn output [ab] (เบžเบดเบก ab))
=> (->> (+ 4 6) (เบœเบปเบ™เบœเบฐเบฅเบดเบ” 5))
5 10

เบ™เปเบฒเปƒเบŠเป‰
เบ™เปเบฒเปƒเบŠเป‰ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบฅเบฐเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡ kwargs
เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆ.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบชเบฐเบซเบกเบฑเบ fn-เบŠเบทเปˆ [args] [kwargs])

เบ•เบปเบงเบขเปˆเบฒเบ‡:

( defn thunk []
"เบชเบฐเบšเบฒเบเบ”เบต")

(เบ‚เปโ€‹เบ‚เบญเบšโ€‹เปƒเบˆโ€‹)
;=> "เบขเบนเปˆเบ™เบตเป‰"

(defn เบเบฒเบ™เบŠเบทเป‰เบ—เบฑเบ‡เบซเบกเบปเบ” [เบˆเปเบฒเบ™เบงเบ™เบฅเบฒเบ„เบฒ & เบ—เบฒเบ‡เป€เบฅเบทเบญเบ [เบ„เปˆเบฒเบ—เปเบฒเบ™เบฝเบก 1.05] [vat 1.1]]
(* เบˆเบณเบ™เบงเบ™โ€‹เบ„เปˆเบฒโ€‹เบ—เบณเบ™เบฝเบก vat))

(เบ™เบณเปƒเบŠเป‰เบเบฒเบ™เบŠเบทเป‰เบ—เบฑเบ‡เปเบปเบ” [10 15])
;=> 173.25

(เบ™เบณเปƒเบŠเป‰เบเบฒเบ™เบŠเบทเป‰เบ—เบฑเบ‡เปเบปเบ” [10 15] {"vat" 1.05})
;=> 165.375

(apply total-purchase [] {"price" 10 "amount" 15 "vat" 1.05})
;=> 165.375

เปเบฅเบฐ
เปเบฅเบฐ เบ–เบทเบเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบ–เป‰เบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”
เบ›เบฐเป€เบกเบตเบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบชเบธเบ”เบ—เป‰เบฒเบเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบญเบทเปˆเบ™เป†, เบ„เปˆเบฒเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ—เปเบฒเบญเบดเบ”
เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰:

=> (เปเบฅเบฐ True False)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เปเบฅเบฐ True True)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เปเบฅเบฐเบ„เบงเบฒเบกเบˆเบดเบ‡ 1)
1

=> (เปเบฅเบฐ True [] False True)
[]

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
เปเบฅเบฐ short-circuits เปเบฅเบฐเบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบ—เปเบฒเบญเบดเบ”เบœเบดเบ”
เบžเบปเบš.

=> (เปเบฅเบฐเบœเบดเบ” (เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต"))
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบขเบทเบ™เบขเบฑเบ™
เบขเบทเบ™เบขเบฑเบ™ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ. เบ–เป‰เบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบšเปเปˆเปเบกเปˆเบ™
เบžเบปเบš, เป€เบ›เบฑเบ™ เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบœเบดเบ”เบžเบฒเบ” เบ–เบทเบเบเบปเบเบ‚เบถเป‰เบ™เบกเบฒ. เบขเบทเบ™เบขเบฑเบ™ เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบ—เปเบฒเบญเบดเบ”
เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบกเปˆเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปƒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เปเบฅเบฐเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ›เบฐเป€เบกเบตเบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ or เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เป„เบ”เป‰
เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเบชเบญเบ‡, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เปเบกเปˆเบ™เบ›เป‰เบฒเบเบŠเบทเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™, เปเบฅเบฐเป€เบ›เบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™
เบเบปเบเบ‚เบถเป‰เบ™เบกเบฒเบ”เป‰เบงเบ เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบขเบนเปˆ เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

(เบขเบทเบ™เบขเบฑเบ™ (= variable expect-value))

(เบขเบทเบ™เบขเบฑเบ™เบœเบดเบ”)
; เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบœเบดเบ”เบžเบฒเบ”

(เบขเบทเบ™เบขเบฑเบ™ (= 1 2) "เบซเบ™เบถเปˆเบ‡เบ„เบงเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบชเบญเบ‡")
; เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”: เบซเบ™เบถเปˆเบ‡เบ„เบงเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบชเบญเบ‡

เบชเบฐเบซเบฒเบเบ”เบฃ
เบชเบฐเบซเบฒเบเบ”เบฃ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบ„เบตเบ—เบตเปˆเบกเบตเบ„เปˆเบฒเปƒเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบซเบผเบทเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ”เบฑเบ”เบชเบฐเบ™เบตเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ
เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒ. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™: the เบ‚เปเป‰เบกเบนเบ™ เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™ เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ”เบฑเบ”โ€‹เปเบเป‰โ€‹, a เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™
or เบ”เบฑเบ”เบŠเบฐเบ™เบต, เปเบฅเบฐ เบกเบนเบ™เบ„เปˆเบฒ. เบ–เป‰เบฒเบซเบผเบฒเบเบเบงเปˆเบฒเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบกเบฑเบ™เบˆเบฐเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เป€เบ›เบฑเบ™เบ„เบนเปˆ.

เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹:

=>(เปƒเบซเป‰ [[เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก {}]]
... (assoc เป€เบเบฑเบš "เบซเบกเบฒ" "เป€เบ›เบทเบญเบ")
... (เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบžเบดเบกโ€‹))
{u'Dog': u'Bark'}

=>(เปƒเบซเป‰ [[เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก {}]]
... (assoc เป€เบเบฑเบš "เบซเบกเบฒ" "เป€เบ›เบทเบญเบ" "เปเบกเบง" "Meow")
... (เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบžเบดเบกโ€‹))
{u'Cat': u'Meow', u'Dog': u'Bark'}

=>(เปƒเบซเป‰ [[เบ„เปเป€เบฅเบฑเบเบŠเบฑเบ™ [1 2 3 4]]]
... (assoc collection 2 None)
... (เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบžเบดเบกโ€‹))
[1, 2, เบšเปเปˆเบกเบต, 4]

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
เบชเบฐเบซเบฒเบเบ”เบฃ เบ›เบฑเบšเบ›เบธเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปเบฅเบฐเบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบšเปเปˆเบกเบต.

เบžเบฑเบเบœเปˆเบญเบ™
เบžเบฑเบเบœเปˆเบญเบ™ เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเปเบเบเบญเบญเบเบˆเบฒเบเบงเบปเบ‡. เบกเบฑเบ™เบขเบธเบ” loop เปƒเบ™เบ—เบฑเบ™เบ—เบต. เบ•เปเปˆเป„เบ›เบ™เบตเป‰
เบ•เบปเบงเบขเปˆเบฒเบ‡เบกเบตเบญเบฑเบ™เป€เบ›เบฑเบ™เบ™เบดเบ” เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ loop เบ—เบตเปˆเบ–เบทเบเบขเบธเบ”เป€เบŠเบปเบฒเบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เป€เบ‚เบปเป‰เบฒเบกเบฒ k.

(เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ True (เบ–เป‰เบฒ (= "k" (raw-input "? "))
(เบžเบฑเบเบœเปˆเบญเบ™)
(เบžเบดเบก "เบฅเบญเบ‡เบญเบตเบเบ„เบฑเป‰เบ‡")))

เบ‚เบปเป‰เบ™
เบ‚เบปเป‰เบ™ เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฎเบฑเบ‡ if เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡
เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบกเบฐเบซเบฒเบžเบฒเบเปเบฅเบฐเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™:

(cond [เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚-1 เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš-1]
[เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚-2 เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš-2])

(เบ–เป‰เบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚-1 เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš-1
(เบ–เป‰เบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚-2 เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš-2))

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

=> (defn check-value [เบ„เปˆเบฒ]
... (cond [(< เบ„เปˆเบฒ 5) (เบžเบดเบก "เบ„เปˆเบฒเบ™เป‰เบญเบเบเบงเปˆเบฒ 5")]
... [(= เบ„เปˆเบฒ 5) (เบžเบดเบก "เบ„เปˆเบฒเป€เบ—เบปเปˆเบฒเบเบฑเบš 5")]
... [(> เบ„เปˆเบฒ 5) (เบžเบดเบก "เบ„เปˆเบฒเปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒ 5")]
... [เบ„เบงเบฒเบกเบˆเบดเบ‡ (เบžเบดเบก "เบ„เบธเบ™เบ„เปˆเบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบ„เบงเบ™เป€เบ›เบฑเบ™")]))

=> (เป€เบŠเบฑเบ-เบ„เปˆเบฒ 6)
เบ„เปˆเบฒเปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒ 5

เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆ
เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆ เบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ›เบซเบฒเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ loop. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰,
(เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ 1) เบ–เบทเบเป€เบญเบตเป‰เบ™เปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡. (เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ 2)เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบฝเบ‡เปเบ•เปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ
เบ—เบธเบเป†เบกเบนเบ™เบ„เปˆเบฒเบญเบทเปˆเบ™เป†เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ.

;; เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ (เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ 1) เปเบฅเบฐ (เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ 2) เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบฅเบฐ
;; เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เปˆเบฒเบ•เบปเบงเป€เบฅเบ

(เบชเปเบฒเบฅเบฑเบš [x collection]
(เป€เบฎเบฑเบ”
(เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ 1 x)
(เบ–เป‰เบฒ (% x 2)
(เบชเบทเบšเบ•เปเปˆ))
(เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ 2 x)))

dict-comp
dict-comp เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบฒเบกเบซเบผเบทเบชเบตเปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบ—เปเบฒเบญเบดเบ”
เบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™ (เบ„เบนเปˆเบ„เปˆเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™) เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เบตเบชเบฒเบกเปเบกเปˆเบ™
เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบฅเบฒเบเบเบฒเบ™เบˆเบฒเบเบฅเปเบฒเบ”เบฑเบš. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบตเปˆเปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ
เบเบฑเปˆเบ™โ€‹เบ•เบญเบ‡โ€‹เบšเบฒเบ‡โ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เป‚เบ”เบโ€‹เบญเบตเบ‡โ€‹เปƒเบชเปˆโ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚โ€‹.

=> (dict-comp x (* x 2) [x (เป„เบฅเบเบฐ 10)] (odd? x))
{1:2, 3:6, 9:18, 5:10, 7:14}.

do / เบ„เบฒเบ”
do เปเบฅเบฐ เบ„เบฒเบ” เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฐเป€เบกเบตเบ™เปเบ•เปˆเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเบเบฑเบšเบ„เบทเบ™เบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ. เบเบฑเบšเบ„เบทเบ™
เบ„เปˆเบฒเบˆเบฒเบเบ—เบธเบเป†เบญเบฑเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบ–เบทเบเบเบปเบเป€เบฅเบตเบ. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ lambda or
list-comp เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹:

=> (เบ–เป‰เบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡
... (เป€เบฎเบฑเบ” (เบžเบดเบก "เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ rock!")
... (เบžเบดเบก "เปเบกเปˆเบ™เปเบฅเป‰เบง, เปเบ—เป‰!")))
เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ Rock!
เปเบกเปˆเบ™เปเบฅเป‰เบง!

;; เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ (เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡) เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ—เบซเบฒเปเบ•เปˆเบฅเบฐเบ„เบปเบ™
;; เปเบฅเบฐเบ—เบธเบเป†เบกเบนเบ™เบ„เปˆเบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เปเบ•เปˆเบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™เบกเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบปเบ™เปƒเบˆ
=> (list-comp (เป€เบฎเบฑเบ” (เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ x)
... (เบ–เป‰เบฒ (< x 5) (* 2 x) .
... (* 4x)))
... (x (เป„เบฅเบเบฐ 10)))
[0, 2, 4, 6, 8, 20, 24, 28, 32]

do เบชเบฒเบกเบฒเบ”เบเบญเบกเบฎเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡, เบˆเบฒเบ 1 เบซเบฒ n.

def / เบŠเบธเบ”
def เปเบฅเบฐ เบŠเบธเบ” เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบœเบนเบเบกเบฑเบ”เบกเบนเบ™เบ„เปˆเบฒ, เบงเบฑเบ”เบ–เบธ, เบซเบผเบทเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบ. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

=> (เบŠเบทเปˆ define ["Alice" "Bob" "Charlie"])
=> (เบžเบดเบกเบŠเบทเปˆ)
[u'Alice', u'Bob', u'Charlie']

=> (setv counter (fn [เบฅเบฒเบเบเบฒเบ™เป€เบเบฑเบš] (.count collection item)))
=> (เป€เบ„เบปเบฒเป€เบ•เบต [1 2 3 4 5 2 3] 2)
2

defclass
เบซเป‰เบญเบ‡เบฎเบฝเบ™เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เบ”เป‰เบงเบ defclass. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ: เป€เบ›เบฑเบ™ vector
เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบŠเบฑเป‰เบ™เบฎเบฝเบ™เบชเบนเบ‡เบชเบธเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบฅเบฐ vector เบญเบทเปˆเบ™เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เปƒเบซเบกเปˆ
class เป€เบ›เบฑเบ™ vectors เบชเบญเบ‡เบฅเบฒเบเบเบฒเบ™.

(เบŠเบทเปˆเบ›เบฐเป€เบžเบ” defclass [super-class-1 super-class-2]
[[เบ„เบธเบ™เบ„เปˆเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”]])

เบ—เบฑเบ‡เบชเบญเบ‡เบ„เปˆเบฒเปเบฅเบฐเบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบขเบนเปˆเปƒเบ™เบŠเบฑเป‰เบ™เบฎเบฝเบ™เปƒเบซเบกเปˆเบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เป‚เบ”เบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

=> (defclass Cat []
... [[เบšเปเปˆโ€‹เบกเบตโ€‹เบญเบฒโ€‹เบเบธโ€‹เบชเบนเบ‡โ€‹เบชเบธเบ”โ€‹]
... [เบชเบต "เบ‚เบฒเบง"]
... [เป€เบงเบปเป‰เบฒ (fn [เบ•เบปเบ™เป€เบญเบ‡] (เบžเบดเบก "Meow"))]])

=> (เบˆเบธเบ”เบ›เป‰เบญเบ‡เบเบฑเบ™ (เปเบกเบง))
=> (setv spot.colour "Black")
'เบ”เบณ'
=> (เบˆเบธเบ”เป€เบงเบปเป‰เบฒ)
Meow

defn / defun
defn เปเบฅเบฐ defun macro เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™: เป„เบ”เป‰ เบŠเบทเปˆ
เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”, vector เบ‚เบญเบ‡ เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต, เปเบฅเบฐ เบฎเปˆเบฒเบ‡เบเบฒเบ เบ‚เบญเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹:

(เบŠเบทเปˆ defn [params] body)

เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบญเบฒเบ”เบกเบตเบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ:

&เบ—เบฒเบ‡เป€เบฅเบทเบญเบ
เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ. เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเป€เบ›เบฑเบ™เบชเบญเบ‡เบฅเบฒเบเบเบฒเบ™เบฅเบฒเบเบเบฒเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆ
เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบŠเบทเปˆเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบฅเบฐเบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต
เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบกเบญเบšเปƒเบซเป‰เป€เบ›เบฑเบ™เบฅเบฒเบเบเบฒเบ™เบ”เบฝเบง, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™ เบšเปเปˆเบกเบต.

=> (defn total-value [value &optional [value-added-tax 10]]
... (+ (/ (* value-added-tax) 100) value))

=> (เบฅเบงเบกเบกเบนเบ™เบ„เปˆเบฒ 100)
110.0

=> (เบกเบนเบ™เบ„เปˆเบฒเบฅเบงเบก 100 1)
101.0

&เบเบฐเปเบˆ

&kwargs
เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเบˆเบฐเบกเบต 0 เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™ arguments.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบˆเบฐเบžเบดเบกเบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”
เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบฅเบฐเบ„เบธเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

=> (defn print-parameters [&kwargs kwargs]
... (เบชเปเบฒเบฅเบฑเบš [(, kv) (.items kwargs)] (เบžเบดเบก kv)))

=> (เบ™เบณเปƒเบŠเป‰ print-parameters [] {"parameter-1" 1"parameter-2" 2})
เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบต-2 2
เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบต-1 1

&เบžเบฑเบเบœเปˆเบญเบ™ เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเบˆเบฐเบกเบต 0 เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™ arguments. เบšเปเปˆเบกเบตเบ•เปเบฒเปเบซเบ™เปˆเบ‡เบญเบทเปˆเบ™
arguments เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบเปเบฒเบ™เบปเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบญเบฑเบ™เบ™เบตเป‰.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบซเป‰ 0 เบซเบฒ n เบ•เบปเบงเป€เบฅเบ
เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบถเปˆเบ‡เบฅเบงเบกเป€เบญเบปเบฒเบ—เบธเบเบ•เบปเบงเป€เบฅเบเบ„เบตเบ เปเบฅเบฐ เบฅเบปเบšเบ—เบธเบเป†เบ•เบปเบงเป€เบฅเบเบ„เบนเปˆ.

=> (defn zig-zag-sum [&เบ•เบปเบงเป€เบฅเบเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ]
(เปƒเบซเป‰ [[ odd-numbers (list-comp x [x num] (odd? x))]
[เบ•เบปเบงเป€เบฅเบเบ„เบนเปˆ (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ-comp x [x เบ•เบปเบงเป€เบฅเบ] (เป€เบ–เบดเบ‡? x))]]
(- (เบฅเบงเบกเป€เบฅเบเบ„เบตเบ) (เบฅเบงเบกเป€เบฅเบเบ„เบนเปˆ))))

=> (zig-zag-sum)
0
=> (zig-zag-sum 3 9 4)
8
=> ( zig-zag-sum 1 2 3 4 5 6 )
-3

defn-alias / defun-alias
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เป„เบ”เป‰ defn-alias เปเบฅเบฐ defun-alias macro เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบซเบผเบฒเบ defn, เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆ
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบง, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ™เบฒเบกเปเบเบ‡. เบญเบทเปˆเบ™เป†
เบเปˆเบงเบฒเบเบฒเบ™เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบเบชเปเบฒเบฅเบฑเบšเบŠเบทเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เปเบฒเบญเบดเบ”, defn-alias เปเบฅเบฐ
defun-alias เปเบกเปˆเบ™เบšเปเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ defn เปเบฅเบฐ defun.

=> (defn-alias [เบ™เบฒเบกเปเบเบ‡เบŠเบทเปˆเบซเบผเบฑเบ] []
... (เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต!"))
=> (เบŠเบทเปˆเบซเบผเบฑเบ)
"เบชเบฐเบšเบฒเบเบ”เบต!"
=> (เบ™เบฒเบกเปเบเบ‡)
"เบชเบฐเบšเบฒเบเบ”เบต!"

defmain
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.1.

เป„เบ”เป‰ defmain macro เบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เบปเป‰เบ™เบ•เปเบ—เบตเปˆเบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ—เบฑเบ™เบ—เบตเบ”เป‰เบงเบ sys.argv as
arguments เบ–เป‰เบฒเปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเป„เบŸเบฅเปŒเบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™ script. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ™เบตเป‰:

(defmain [&rest args]
(เป€เบฎเบฑเบ”-เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡-เบ”เป‰เบงเบเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡))

เป€เบ—เบปเปˆเบฒเบเบฑเบš:

def main(*args):
do_something_with(args)
เบเบฑเบšเบ„เบทเบ™ 0

เบ–เป‰เบฒ __name__ == "__main__":
sys เบ™เบณ เป€เบ‚เบปเป‰เบฒ
retval = main(*sys.arg)

เบ–เป‰เบฒ isinstance(retval, int):
sys.exit(retval)

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ•เบฒเบกเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰, เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™
เปƒเบŠเป‰เป€เบ›เบฑเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบญเบญเบเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. (Python เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบญเบญเบเบˆเบฒเบเบชเบฐเบ–เบฒเบ™เบฐ 0 เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™,
เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เบšเปเปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡!)

(เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ (sys.exit 0) เบšเปเปˆเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบˆเบฒเบ
defmain, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเปƒเบชเปˆ ( defmain ) เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™เป„เบŸเบฅเปŒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.)

defmacro
defmacro เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ” macro. เบฎเบนเบšเปเบšเบšเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™ (defmacro เบŠเบทเปˆ [เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™]
expr).

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบกเบฐเบซเบฒเบžเบฒเบเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเปเบฅเบเบ›เปˆเบฝเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™เบฅเบฐเบซเบฑเบ”,
เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™ infix notation, เบšเปˆเบญเบ™เบ—เบตเปˆ operator เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡
เป‚เบ•เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™.

=> (defmacro infix [เบฅเบฐเบซเบฑเบ”]
... (เบญเป‰เบฒเบ‡เบชเบดเบ” (
... (unquote (เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” 1))
... (unquote (เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” 0))
... (unquote (เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” 2)))))

=> (infix (1 + 1))
2

defmacro-alias
defmacro-alias เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ” macro เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบซเบผเบฒเบ (aliases). เบฎเบนเบšเปเบšเบšเบ—เบปเปˆเบงเป„เบ›
is (defmacro-alias [เบŠเบทเปˆ] [เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™] expr). เบกเบฑเบ™เบชเป‰เบฒเบ‡ macro เบซเบผเบฒเบเบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบฅเบฐเป€เบ™เบทเป‰เบญเปƒเบ™, เบžเบฒเบเปƒเบ•เป‰เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบ‚เบญเบ‡เบŠเบทเปˆ.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบชเบญเบ‡ macro, เบ—เบฑเบ‡เบชเบญเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™
infix notation.

=> (defmacro-alias [infix infi] [เบฅเบฐเบซเบฑเบ”]
... (เบญเป‰เบฒเบ‡เบชเบดเบ” (
... (unquote (เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” 1))
... (unquote (เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” 0))
... (unquote (เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” 2)))))

=> (infix (1 + 1))
2
=> (infi (1 + 1))
2

defmacro/g!
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

defmacro/g! เป€เบ›เบฑเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบžเบดโ€‹เป€เบชเบ”โ€‹เบ‚เบญเบ‡โ€‹ defmacro เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” gensym
เบชเปเบฒเบฅเบฑเบšเบชเบฑเบ™เบเบฒเบฅเบฑเบเปƒเบ”เป†เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ g!.

เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡, g!a เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™ (gensym "เบ").

เป€เบšเบดเปˆเบ‡ เบเบฑเบ‡:
เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ -gensymโ€‹

เบœเบนเป‰โ€‹เบฅเบฐโ€‹เป€เบกเบตเบ”
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

เบœเบนเป‰โ€‹เบฅเบฐโ€‹เป€เบกเบตเบ” เบเปเบฒเบ™เบปเบ”เบกเบฐเบซเบฒเบžเบฒเบเบ‚เบญเบ‡เบœเบนเป‰เบญเปˆเบฒเบ™, เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบซเบผเบทเบ”เบฑเบ”เปเบ›เบ‡ syntax.

=> (defreader ^ [expr] (เบžเบดเบก expr))
=> #^(1 2 3 4)
( 1 2 3 4 )
=> #^ "เบชเบฐเบšเบฒเบเบ”เบต"
"เบชเบฐเบšเบฒเบเบ”เบต"

เป€เบšเบดเปˆเบ‡ เบเบฑเบ‡:
เปเบงเบ” Reader Macros

เป„เบ”เป‰
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

เป„เบ”เป‰ เป€เบญเบปเบฒเบงเบฑเบ”เบ–เบธเบญเบญเบเบˆเบฒเบ namespace เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

=> (setv foo 42)
=> (del foo)
=> เบŸเบน
Traceback (เบเบฒเบ™เป‚เบ—เบซเบผเป‰เบฒเบชเบธเบ”เบชเบธเบ”เบ—เป‰เบฒเบ):
เป„เบŸเบฅเปŒ " ", เปเบ–เบง 1, เปƒเบ™
NameError: เบŠเบทเปˆ 'foo' เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”

เป„เบ”เป‰ เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบงเบฑเบ”เบ–เบธเบญเบญเบเบˆเบฒเบเปเบœเบ™เบ—เบตเปˆ, เบฅเบฒเบเบŠเบทเปˆ, เปเบฅเบฐเบญเบทเปˆเบ™เป†เบญเบตเบ.

=> (เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš setv (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป„เบฅเบเบฐ 10)))
=> เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš
[0, 1, 2, 3, 4, 5, 6, 7, 8]
=> (del (slice test 2 4));; เป€เบญเบปเบฒเบฅเบฒเบเบเบฒเบ™เบˆเบฒเบ 2 เบซเบฒ 4 เบเบปเบเป€เบงเบฑเป‰เบ™
=> เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš
[0, 1, 4, 5, 6, 7, 8, 9]
=> (setv dic {"foo" "bar"})
=> เบ”เบดเบ
{"foo": "bar"}
=> (del (เป„เบ”เป‰ dic "foo"))
=> เบ”เบดเบ
{}

เป‚เบ”เป‚เบ•
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.1.

เป‚เบ”เป‚เบ• เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ‡เปˆเบฒเบเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป‚เบ—เบซเบฒเบงเบฑเบ”เบ–เบธ.

=> (doto [] (.append 1) (.append 2).reverse)
[2 1]

=> (เบŠเบธเบ”เบชเบฐเบชเบปเบก [])
=> (.เบ•เบทเปˆเบกเบเบฒเบ™เป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบก 1)
=> (.เบ•เบทเปˆเบกเบเบฒเบ™เป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบก 2)
=> (.เบเบฒเบ™เป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบกเบ„เบทเบ™)
=> เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒ
[2 1]

เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™
เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™ เบ›เบฐเป€เบกเบตเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒ.

=> (eval '(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ"))
"เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบŠเบฒเบงโ€‹เป‚เบฅเบ"

eval-and-compile
eval-when-compile
เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” / เบฅเบปเบ”
เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” เปเบฅเบฐ เบฅเบปเบ” เปเบกเปˆเบ™ macro เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ„เปเป€เบฅเบฑเบเบŠเบฑเบ™:

=> (เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ” (เป„เบฅเบเบฐ 10))
0

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™
เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบซเบผเบท vector. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบ„เบปเบ™
เป‚เบ—เบ–เบทเบเบเบปเบเป€เบฅเบตเบเปเบฅเบฐ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบเบฑเบšเบ„เบทเบ™เบกเบฒ เบšเปเปˆเบกเบต เปเบ—เบ™. เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบŠเป‰เบณ
เปƒเบ™เป„เบฅเบเบฐ เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™ element in เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ เบฎเบฝเบเบฎเป‰เบญเบ‡ เบœเบปเบ™โ€‹เบ‚เป‰เบฒเบ‡โ€‹เบ„เบฝเบ‡ เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบเบฑเบš
element เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹:

;; เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ (เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡) เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบŠเป‰เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ”เบฝเบง
(เบชเปเบฒเบฅเบฑเบš [เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบญเบปเบ‡เบ›เบฐเบเบญเบš] (เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡))

;; เบชเปเบฒเบฅเบฑเบšเบชเบฒเบกเบฒเบ”เบกเบตเบ•เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™
(เบชเปเบฒเบฅเบฑเบš [เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบญเบปเบ‡เบ›เบฐเบเบญเบš] (เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡)
(เบญเบทเปˆเบ™เป† (เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡-2)))

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ เบญเบทเปˆเบ™ block เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ loop เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด. เบ–เป‰เบฒ
เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เปเบกเปˆเบ™โ€‹เบขเบธเบ”โ€‹เป€เบŠเบปเบฒโ€‹เบเบฒเบ™โ€‹ เบžเบฑเบเบœเปˆเบญเบ™, เบเบฒเบ™ เบญเบทเปˆเบ™ block เบšเปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”.

=> (เบชเปเบฒเบฅเบฑเบš [เบญเบปเบ‡เบ›เบฐเบเบญเบš [1 2 3]] (เบ–เป‰เบฒ (<เบญเบปเบ‡เบ›เบฐเบเบญเบš 3)
... (เบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบดเบก)
... (เปเบ•เบ))
... (เบญเบทเปˆเบ™ (เบžเบดเบก "เบงเบปเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบฎเบนเบš")))
1
2

=> (เบชเปเบฒเบฅเบฑเบš [เบญเบปเบ‡เบ›เบฐเบเบญเบš [1 2 3]] (เบ–เป‰เบฒ (<เบญเบปเบ‡เบ›เบฐเบเบญเบš 4)
... (เบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบดเบก)
... (เปเบ•เบ))
... (เบญเบทเปˆเบ™ (เบžเบดเบก "เบงเบปเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบฎเบนเบš")))
1
2
3
loop เบชเปเบฒเป€เบฅเบฑเบ”

genexpr
genexpr เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบซเบผเบทเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เป„เบ”เป‰
เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบ„เบงเบšเบ„เบธเบกเบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเบงเบ—เบตเบชเบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰
เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบฅเบฒเบเบเบฒเบ™เบˆเบฒเบเบฅเบฒเบเบŠเบทเปˆ. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเบชเบฒเบกเปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบ
เบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. genexpr เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš
list-comp, เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เปเบ•เปˆโ€‹เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เป€เบ›เบฑเบ™ iterable เบ—เบตเปˆโ€‹เบ›เบฐโ€‹เป€เบกเบตเบ™โ€‹เบ„เปˆเบฒโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เป‚เบ”เบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™
เบเบฒเบ™โ€‹เบ›เบฐโ€‹เป€เบกเบตเบ™โ€‹เบœเบปเบ™โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ—เบฑเบ™โ€‹เบ—เบตโ€‹เบ—เบฑเบ™โ€‹เปƒเบ”โ€‹.

=> (เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒ def (เบŠเปˆเบงเบ‡ 10))
=> (def filtered (genexpr x [x collection] (เปเบกเป‰เปเบ•เปˆ? x)))
=> (เบฅเบฒเบเบŠเบทเปˆเบ–เบทเบเบเบฑเปˆเบ™เบ•เบญเบ‡)
[0, 2, 4, 6, 8]

gensym
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

gensym เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ macros เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™
เบเบฒเบ™เบ›เบฐเบ—เบฐเบเบฑเบ™เบ‚เบญเบ‡เบŠเบทเปˆเบ•เบปเบงเปเบ›เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™.

=> (gensym)
u':G_1235'

=> (gensym "x")
u':x_1236'

เป€เบšเบดเปˆเบ‡ เบเบฑเบ‡:
เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ -gensymโ€‹

เป„เบ”เป‰เบฎเบฑเบš
เป„เบ”เป‰เบฎเบฑเบš เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ”เบฝเบงเปƒเบ™เบฅเบฒเบเบŠเบทเปˆเปเบฅเบฐเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก. เป„เบ”เป‰เบฎเบฑเบš เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™:
เป„เบ”เป‰ เบ‚เปเป‰เบกเบนเบ™ เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™ เปเบฅเบฐ เบ”เบฑเบ”เบŠเบฐเบ™เบต or เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ เบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™. เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™
เบ„เปˆเบฒเบˆเบฒเบเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก เบซเบผเบทเบฅเบฒเบเบเบฒเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰:

=> (เปƒเบซเป‰ [[เบชเบฑเบ” {"เปเบฒ" "เป€เบ›เบทเบญเบ" "เปเบกเบง" "เป€เบกเบง"}]
... [เบ•เบปเบงเป€เบฅเบ ["เบชเบนเบ™" "เบซเบ™เบถเปˆเบ‡" "เบชเบญเบ‡" "เบชเบฒเบก"]]]
... (เบžเบดเบก (เป€เบญเบปเบฒเบชเบฑเบ” "เปเบฒ"))
... (เบžเบดเบก (เป„เบ”เป‰เบ•เบปเบงเป€เบฅเบ 2)))
เป€เบ›เบทเบญเบ
เบชเบญเบ‡

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
เป„เบ”เป‰เบฎเบฑเบš เป€เบžเบตเปˆเบก KeyError เบ–เป‰เบฒเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ–เบทเบเบชเบญเบšเบ–เบฒเบกเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง.

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
เป„เบ”เป‰เบฎเบฑเบš เบเบปเบ IndexError เบ–เป‰เบฒเบฅเบฒเบเบŠเบทเปˆเบซเบผเบท tuple เบ–เบทเบเบชเบญเบšเบ–เบฒเบกเบชเปเบฒเบฅเบฑเบšเบ”เบฑเบ”เบชเบฐเบ™เบตเบ—เบตเปˆเบขเบนเปˆเบ™เบญเบ
เป€เบ‚เบ”เปเบ”เบ™.

เบ—เบปเปˆเบงเป‚เบฅเบ
เบ—เบปเปˆเบงเป‚เบฅเบ เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเปเบฒเบเบชเบฑเบ™เบเบฒเบฅเบฑเบเป€เบ›เบฑเบ™เบ—เบปเปˆเบงเป‚เบฅเบ. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบเปเบฒเบ™เบปเบ” a
เบกเบนเบ™เบ„เปˆเบฒเป€เบ›เบฑเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบปเปˆเบงเป‚เบฅเบ. เบเบฒเบ™เบญเปˆเบฒเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบปเปˆเบงเป‚เบฅเบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบต เบ—เบปเปˆเบงเป‚เบฅเบ เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™ --
เบžเบฝเบ‡เปเบ•เปˆเบกเบญเบšเบซเบกเบฒเบเปƒเบซเป‰เบกเบฑเบ™เป€เบฎเบฑเบ”.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบปเปˆเบงเป‚เบฅเบ a เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบ„เปˆเบฒเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบฅเบฐ
เบ•เปเปˆเบกเบฒเปเบกเปˆเบ™เบžเบดเบกเบญเบญเบเปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบญเบทเปˆเบ™. เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ เบ—เบปเปˆเบงเป‚เบฅเบ เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™, เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเบชเบญเบ‡
เบˆเบฐเบ–เบดเป‰เบกเป€เบ›เบฑเบ™ เบŠเบทเปˆเบœเบดเบ”เบžเบฒเบ”.

(defn set-a [เบ„เปˆเบฒ]
(เบ—เบปเปˆเบงเป‚เบฅเบ a)
(เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ))

(defn print-a []
(เบžเบดเบก a))

(เบŠเบธเบ” 5)
(เบžเบดเบก-a)

if / เบ–เป‰เบฒโ€‹เบšเปเปˆ
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0: เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™

if เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. เบกเบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚
block เปเบฅเบฐเบ•เบฑเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ•เบฑเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ›เบฐเป€เบกเบตเบ™เป€เบ–เบดเบ‡ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบ—เบฒเบ‡เป€เบฅเบทเบญเบ,
เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบกเปˆเบ™
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เบ–เป‰เบฒโ€‹เบšเปเปˆ เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™, เปเบ•เปˆเบ•เบฑเบ™เบ—เบตเบชเบญเบ‡เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบกเบทเปˆเบญเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ
เบ•เบฑเบ™เบ—เบตเบชเบฒเบกเปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบกเบทเปˆเบญเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ” - เบ„เปเบฒเบชเบฑเปˆเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบ‚เบญเบ‡ if.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™ เบ™เบณ เปƒเบŠเป‰:

(เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒ (เป€เบ‡เบดเบ™โ€‹เป€เบซเบผเบทเบญโ€‹? เบšเบฑเบ™โ€‹เบŠเบตโ€‹)
(เบžเบดเบก "เป„เบ›เบŠเบทเป‰เป€เบ„เบทเปˆเบญเบ‡")
(เบžเบดเบก "เป„เบ›เป€เบฎเบฑเบ”เบงเบฝเบ"))

(เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™ (เป€เบ‡เบดเบ™-เบŠเป‰เบฒเบ? เบšเบฑเบ™เบŠเบต)
(เบžเบดเบก "เป„เบ›เป€เบฎเบฑเบ”เบงเบฝเบ")
(เบžเบดเบก "เป„เบ›เบŠเบทเป‰เป€เบ„เบทเปˆเบญเบ‡"))

เบ„เบงเบฒเบกเบˆเบดเบ‡เบ‚เบญเบ‡ Python เปเบกเปˆเบ™เป€เบ„เบปเบฒเบฅเบปเบš. เบšเปเปˆเบกเบต, เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบชเบนเบ™เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ•เบปเบงเป€เบฅเบ, เบฅเปเบฒเบ”เบฑเบšเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ,
เปเบฅเบฐเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเป€เบ›เบปเปˆเบฒเปเบกเปˆเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡; เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เปเบกเปˆเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.

lisp-เบ–เป‰เบฒ / เบŠเบตเบงเบดเบ” เปเบฅเบฐ lisp-เบ–เป‰เบฒ-เบšเปเปˆ / lif-not
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.2: lissp-if-not / lif-not

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบกเบฑเบ Lispy เบซเบผเบฒเบ if เบ‚เปเป‰, เบžเบงเบเป€เบฎเบปเบฒเบกเบต lisp-เบ–เป‰เบฒ, เบซเบผเบท เบŠเบตเบงเบดเบ”. เบ™เบตเป‰ เบžเบฝเบ‡เปเบ•เปˆ เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ
เบšเปเปˆเบกเบต / nil เบœเบดเบ”! เบ„เปˆเบฒ Python "false-ish" เบญเบทเปˆเบ™เป†เบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡.
เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบกเบต lisp-เบ–เป‰เบฒ-เบšเปเปˆ เปเบฅเบฐ lif-not เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบš if เปเบฅเบฐ เบ–เป‰เบฒโ€‹เบšเปเปˆ เป€เบŠเบดเปˆเบ‡เบ›เบตเป‰เบ™เบเบฑเบšเบเบฑเบ™
เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš.

=> (lisp-เบ–เป‰เบฒ "เบˆเบดเบ‡" "เบœเบดเบ”")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"
=> (lisp-if false "true" "false")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"
=> (lisp-if 0 "เบˆเบดเบ‡" "เบœเบดเบ”")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"
=> (lisp-if nil "เบˆเบดเบ‡" "false")
"เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡"
=> (lisp-เบ–เป‰เบฒเบšเปเปˆเบกเบต "เบˆเบดเบ‡" "เบœเบดเบ”")
"เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡"
=> (lisp-if-not nil "เบˆเบดเบ‡" "false")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"
=> (lisp-if-not เบšเปเปˆเบกเบต "เบˆเบดเบ‡" "false")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"
=> (lisp-if-not False "true" "false")
"เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡"

; เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเปเบ•เปˆเบชเบฑเป‰เบ™เบเบงเปˆเบฒ
=> (เบ–เป‰เบฒ "เบˆเบดเบ‡" "เบœเบดเบ”")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"
=> ( lif nil "เบˆเบดเบ‡" "เบœเบดเบ”")
"เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡"
=> (lif-not none "เบˆเบดเบ‡" "false")
"เบ„เบงเบฒเบกเบˆเบดเบ‡"

เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ
เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเป‚เบกเบ”เบนเบ™, เป€เบŠเบฑเปˆเบ™เปƒเบ™ Python. เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบต เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.

;; เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปเบ•เปˆเบฅเบฐเป‚เบกเบ”เบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰
;;
;; Python:
;; sys เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ
;; เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ os.path
(เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ sys os.path)

;; เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบˆเบฒเบเป‚เบกเบ”เบนเบ™
;;
;; Python: เบˆเบฒเบเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ os.path เบกเบตเบขเบนเปˆ, isdir, isfile
(เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ [os.path [เบกเบต isdir isfile]])

;; เบ™เบณเป€เบ‚เบปเป‰เบฒเบ”เป‰เบงเบเบ™เบฒเบกเปเบเบ‡
;;
;; Python: เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ sys เป€เบ›เบฑเบ™ systest
(เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ [sys : as systest])

;; เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบซเบผเบฒเบโ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹.
(เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ [tests.resources [kwtest function-with-a-dash]]
[os.path [เบกเบต isdir isfile]]
[sys : เป€เบ›เบฑเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹])

;; เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบŸเบฑเบ‡เบŠเบฑเบ™เป‚เบกเบ”เบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ namespace เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™
(เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ [sys [*]])

lambda / fn
lambda เปเบฅเบฐ fn เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆ. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš
defn: เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™ vector เบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡
function lambda เบชเบปเปˆเบ‡เบ„เบทเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเปเปˆ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆ
เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปเบฅเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบญเบทเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”.

=> (เบ„เบปเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ [{:เบŠเบทเปˆ "Alice": เบญเบฒเบเบธ 20}
... {:เบŠเบทเปˆ "เบšเบฑเบญเบš" :เบญเบฒเบเบธ 25}
... {:เบŠเบทเปˆ "Charlie" : เบญเบฒเบเบธ 50}
... {:เบŠเบทเปˆ "เป€เบ”เบš":เบญเบฒเบเบธ 5}])

=> (defn display-people [เบ•เบปเบงเบเบญเบ‡เบ„เบปเบ™]
... (เบชเปเบฒเบฅเบฑเบš [เบ„เบปเบ™] (เบ–เป‰เบฒ (เบ„เบปเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡) (เบžเบดเบก (: เบŠเบทเปˆเบ„เบปเบ™)))))

=> (เบ„เบปเบ™เบชเบฐเปเบ”เบ‡ - เบ„เบปเบ™ (fn [เบ„เบปเบ™] (< (: เบšเบธเบเบ„เบปเบ™เบญเบฒเบเบธ) 25)))
Alice
Dave

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบปเบเบเบฐเบ•เบด, เบ–เป‰เบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบเปเบกเปˆเบ™เบชเบฒเบ, เบกเบฑเบ™
เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ docstring. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปƒเบซเป‰ docstrings เบงเบดเบ—เบตเบเบฒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™.

=> (setv เป€เบงเบฅเบฒเบชเบฒเบก
... (fn [x]
... "เบ„เบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบงเบเบชเบฒเบก เปเบฅเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš."
... (* x 3)))

เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบขเบทเบ™เบขเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบ•เบปเบงเบชเป‰เบฒเบ‡เบ‚เบญเบ‡ Python เบŠเปˆเบงเบเป€เบซเบผเบทเบญ เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡:

=> (เบŠเปˆเบงเบเบ„เบฑเป‰เบ‡เบชเบฒเบก)
เบŠเปˆเบงเบโ€‹เป€เบซเบผเบทเบญโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™ times_threeโ€‹:

times_three(x)
เบ„เบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบงเบเบชเบฒเบก เปเบฅเบฐเปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš
(END)

เบชเบธเบ”เบ—เป‰เบฒเบ
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.2.

เบชเบธเบ”เบ—เป‰เบฒเบ เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ„เปเป€เบฅเบฑเบเบŠเบฑเบ™:

=> (เบซเบผเป‰เบฒเบชเบธเบ” [2 4 6])
6

เปƒเบซเป‰
เปƒเบซเป‰ เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”. เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡
เปƒเบซเป‰ เปเบšเบšเบŸเบญเบกเปเบฅเบฐเบขเบธเบ”เบขเบนเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเปเบšเบšเบŸเบญเบก. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰
เบžเบถเบ”เบ•เบดเบเบณ:

=> (เปƒเบซเป‰ [[x 5]] (เบžเบดเบก x)
... (เปƒเบซเป‰ [[x 6]] (เบžเบดเบก x))
... (เบžเบดเบก x))
5
6
5

เป„เบ”เป‰ เปƒเบซเป‰ macro เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™: เป€เบ›เบฑเบ™ vector เบเปเบฒเบ™เบปเบ” เบ•เบปเบงเปเบ› เปเบฅเบฐ เบฎเปˆเบฒเบ‡เบเบฒเบ เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบš
เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ•เบปเบงเปเบ› เป€เบ›เบฑเบ™ vector เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบกเปˆเบ™เบ•เบปเบงเปเบ›เบ”เบฝเบงเบซเบผเบท vector
เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เบนเปˆเบ„เปˆเบฒเบ—เบตเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ”เบฝเบง, เบกเบฑเบ™เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบกเบนเบ™เบ„เปˆเบฒ
เบšเปเปˆเบกเบต; เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.

=> (เปƒเบซเป‰ [x [y 5]] (เบžเบดเบก xy))
เบšเปเปˆเบกเบต 5

list-comp
list-comp เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบซเบผเบทเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบ—เปเบฒเบญเบดเบ”
เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบ„เบงเบšเบ„เบธเบกเบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เบตเบชเบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ
เป€เบฅเบทเบญเบเบฅเบฒเบเบเบฒเบ™เบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเบชเบฒเบกเปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบเบšเบฒเบ‡
เบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. เบšเบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡:

=> (เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒ def (เบŠเปˆเบงเบ‡ 10))
=> (list-comp x [x collection])
[0, 1, 2, 3, 4, 5, 6, 7, 8]

=> (list-comp (* x 2) [x collection])
[0, 2, 4, 6, 8, 10, 12, 14, 16]

=> (list-comp (* x 2) [x collection] (< x 5))
[0, 2, 4, 6, 8]

เบšเปเปˆ
เบšเปเปˆ เบ–เบทเบเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ”เบฝเบงเปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ›เบตเป‰เบ™เบ„เบทเบ™
เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡. เบ–เป‰เบฒ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เปเบกเปˆเบ™โ€‹เปƒเบซเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบเบฒเบ™โ€‹, เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™, เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™.
เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™ เบ™เบณ เปƒเบŠเป‰:

=> (เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบšเปเปˆเปเบกเปˆเบ™เบœเบดเบ”)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบšเปเปˆเปเบกเปˆเบ™เบšเปเปˆเบกเบต)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

or
or เบ–เบทเบเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบกเบฑเบ™เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒ
เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ›เบญเบก. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบ„เปˆเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™.

=> (เบซเบผเบท True False)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เปเบฅเบฐ False เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เปเบฅเบฐ False 1 True False)
1

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
or short-circuits เปเบฅเบฐเบขเบธเบ”เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™
เบžเบปเบš.

=> (เบซเบผเบทเบ–เบทเบเบ•เป‰เบญเบ‡ (เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต"))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบžเบดเบก
เบžเบดเบก เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบœเบปเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™เบซเบ™เป‰เบฒเบˆเป. เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰:

(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!")

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
เบžเบดเบก เบเบฑเบšเบ„เบทเบ™เบกเบฒเบชเบฐเป€เปเบต เบšเปเปˆเบกเบต.

quasiquote
quasiquote เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบญเป‰เบฒเบ‡โ€‹เบญเบตเบ‡โ€‹เปเบšเบšโ€‹เบŸเบญเบกโ€‹, เปเบ•เปˆโ€‹เบเบฑเบ‡โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เป€เบญเบปเบฒโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เป€เบกเบตเบ™โ€‹เบœเบปเบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹.
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบžเบฒเบเปƒเบ™ เบ quasiquote เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เป€เบกเบตเบ™โ€‹เบœเบปเบ™โ€‹เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ unquote (~) The
เปเบšเบšเบŸเบญเบกเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบเบเป‚เบ”เบเปƒเบŠเป‰ unquote-splice (~@). Quasiquote เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™
เบ‚เบฝเบ™เป‚เบ”เบเปƒเบŠเป‰ backquote (`) เบชเบฑเบ™เบเบฒเบฅเบฑเบ.

;; เปƒเบซเป‰ 'qux' เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบ„เปˆเบฒ (bar baz)
`(foo ~qux)
; เป€เบ—เบปเปˆเบฒเบเบฑเบš '(foo (bar baz))
`(foo ~@qux)
; เป€เบ—เบปเปˆเบฒเบเบฑเบš '(foo bar baz)

quote
quote เบชเบปเปˆเบ‡เบ„เบทเบ™เปเบšเบšเบŸเบญเบกเบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เบ›เบฐเป€เบกเบตเบ™เบกเบฑเบ™. quote เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™
เบ‚เบฝเบ™เป‚เบ”เบเปƒเบŠเป‰ apostrophe (') เบชเบฑเบ™เบเบฒเบฅเบฑเบ.

=> (setv x '(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ"))
; v variable x เบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™ & เบšเปเปˆเป„เบ”เป‰เบ›เบฐเป€เบกเบตเบ™
=> x
(u'เบžเบดเบก' u'เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ')
=> (eval x)
เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ

เบ•เป‰เบญเบ‡เบเบฒเบ™
เบ•เป‰เบญเบ‡เบเบฒเบ™ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบกเบฒเป‚เบ„เบˆเบฒเบเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเปƒเบซเป‰. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต
เบเบฒเบ™เบฅเบฐเบšเบธเป‚เบกเบ”เบนเบ™เบ—เบตเปˆ macros เบ„เบงเบ™เบ–เบทเบเบ™เปเบฒเป€เบ‚เบปเป‰เบฒ. เบซเบผเบฒเบเป‚เบกเบ”เบนเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ”เป‰
เบเบฑเบšเบ”เบฝเบง เบ•เป‰เบญเบ‡เบเบฒเบ™.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบกเบฒเป‚เบ„เบˆเบฒเบ เป‚เบกเบ”เบนเบ™-1 เปเบฅเบฐ เป‚เบกเบ”เบนเบ™-2:

(เบ•เป‰เบญเบ‡เบเบฒเบ™ module-1 module-2)

เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ / cdr
เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ เปเบฅเบฐ cdr เบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”:

=> (เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ (เบŠเปˆเบงเบ‡ 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

set-comp
set-comp เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบธเบ”. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบซเบผเบทเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™
เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เบตเบชเบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบฅเบฒเบเบเบฒเบ™เบˆเบฒเบ a
เบฅเบณเบ”เบฑเบš. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเบชเบฒเบกเปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™เปƒเบ™
เบฅเปเบฒเบ”เบฑเบšเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚.

=> (เบ‚เปเป‰เบกเบนเบ™ setv [1 2 3 4 5 2 3 4 5 3 4 5])
=> (set-comp x [x เบ‚เปเป‰เบกเบนเบ™] (odd? x))
{1, 3, 5}

slice
slice เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบŠเบธเบ”เบเปˆเบญเบเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบฅเบฐเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปƒเบซเบกเปˆเบˆเบฒเบเบกเบฑเบ™. เปเบšเบšเบŸเบญเบก
เปƒเบŠเป‰เป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เปœเป‰เบญเบเปœเบถเปˆเบ‡เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบฅเบฐเบšเบธเบฅเบฒเบเบŠเบทเปˆเป€เบžเบทเปˆเบญเบ•เบฑเบ”. เบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเบฒเบกเบฒเบ”
เปƒเบŠเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ•เปเบฒเปเบซเบ™เปˆเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เบŠเบธเบ”เบเปˆเบญเบ. เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบฐเบซเบ™เบญเบ‡, เป„เบ”เป‰
เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ เบšเปเปˆเบกเบต เบˆเบฐเบ–เบทเบเปƒเบŠเป‰เปเบ—เบ™. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบฒเบกเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ
เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹.

slice เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เบนเปˆเบฎเปˆเบงเบกเบ‡เบฒเบ™ Python เบ‚เบญเบ‡เบกเบฑเบ™. เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เบฒเบ‡เบฅเบปเบšเบ–เบทเบเบ™เบฑเบš
เป€เบฅเบตเปˆเบกเปเบ•เปˆเบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™. เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹:

=> (เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒ def (เบŠเปˆเบงเบ‡ 10))

=> (เป€เบเบฑเบšเบชเบฐเป„เบฅเป‰)
[0, 1, 2, 3, 4, 5, 6, 7, 8]

=> (เป€เบเบฑเบšเบชเบฐเป„เบฅเป‰ 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")

เบ–เบดเป‰เบก เบชเบฒเบกเบฒเบ”เบเบญเบกเบฎเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ”เบฝเบง (an เบ‚เปเป‰โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™ class เบซเบผเบท instance) เบซเบผเบทเบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบเบฑเบš
เบเบปเบเบฅเบฐเบ”เบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบ เบ‚เปเป‰โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™.

เบžเบฐเบเบฒเบเบฒเบก
เป„เบ”เป‰ เบžเบฐเบเบฒเบเบฒเบก เปเบšเบšเบŸเบญเบกเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ a เบžเบฐเบเบฒเบเบฒเบก / เบˆเบฑเบš เบ•เบฑเบ™. เปเบšเบšเบŸเบญเบกเปเบกเปˆเบ™เปƒเบŠเป‰เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

(เบžเบฐเบเบฒเบเบฒเบก
(เบŸเบฑเบ‡เบŠเบฑเบ™เบœเบดเบ”เบžเบฒเบ”)
(เบˆเบฑเบš [e ZeroDivisionError] (เบžเบดเบก "เบเบฒเบ™เปเบšเปˆเบ‡เป‚เบ”เบเบชเบนเบ™"))
(เบญเบทเปˆเบ™เป† (เบžเบดเบก "เบšเปเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”"))
(เบชเบธเบ”เบ—เป‰เบฒเบ (เบžเบดเบก "เบซเบกเบปเบ”เปเบฅเป‰เบง")))

เบžเบฐเบเบฒเบเบฒเบก เบ•เป‰เบญเบ‡เบกเบตเบขเปˆเบฒเบ‡เปœเป‰เบญเบเปœเบถเปˆเบ‡เบญเบฑเบ™ เบˆเบฑเบš block, เปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบฒเบ”เบˆเบฐเบ›เบฐเบเบญเบšเบกเบต an เบญเบทเปˆเบ™ or เบชเบธเบ”เบ—เป‰เบฒเบ
เบ•เบฑเบ™. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปเบกเปˆเบ™โ€‹เบเบปเบโ€‹เบ‚เบถเป‰เบ™โ€‹เบกเบฒโ€‹เบเบฑเบšโ€‹เบ•เบฑเบ™โ€‹เบˆเบฑเบšโ€‹เบ„เบนเปˆโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡
error-prone-function, that เบˆเบฑเบš block เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ–เบทเบเบเบปเบเบ‚เบถเป‰เบ™เบกเบฒ, the เบญเบทเปˆเบ™
block เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เป„เบ”เป‰ เบชเบธเบ”เบ—เป‰เบฒเบ block เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบเป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบซเบผเบทเบšเปเปˆ
เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบเบปเบโ€‹เบ‚เบถเป‰เบ™โ€‹เบกเบฒโ€‹.

เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ
เป„เบ”เป‰ เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ macro เป€เบ›เบฑเบ™ shorthand เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™ an if เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเปƒเบซเป‰
เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบกเปˆเบ™ เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบ‚เบญเบ‡เบกเบฐเบซเบฒเบžเบฒเบเบ™เบตเป‰.

(เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚)

(เบ–เป‰เบฒเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚
เบšเปเปˆเบกเบต
(เป€เบฎเบฑเบ”โ€‹เบ–เบฐโ€‹เปเบซเบผเบ‡โ€‹เบเบฒเบ™โ€‹))

unquote
เบžเบฒเบโ€‹เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบš quasiquotedโ€‹, unquote เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบ. unquote เปเบกเปˆเบ™ aliased เบเบฑเบš
tilde (~) เบชเบฑเบ™เบเบฒเบฅเบฑเบ.

(เบŠเบทเปˆเบซเบเปเป‰ "Cuddles")
(quasiquote (= เบŠเบทเปˆ (เบŠเบทเปˆ unquote)))
;=> (u'='u'name' u'Cuddles')

`(=เบŠเบทเปˆ ~เบŠเบทเปˆ)
;=> (u'='u'name' u'Cuddles')

unquote-splice
unquote-splice เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบเบžเบฒเบเปƒเบ™เบฎเบนเบšเปเบšเบš quasiquoted, เบ„เบทเบเบฑเบ™เบเบฑเบš
unquote. unquote-splice เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญเบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบตเปˆเบ–เบทเบ unquoted เบกเบต an
เบกเบนเบ™เบ„เปˆเบฒ iterable, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™ "splice" เบ—เบตเปˆ iterable เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเปเบšเบš quasiquoted. unquote-splice is
เบ™เบฒเบกเปเบเบ‡เบเบฑเบš ~@ เบชเบฑเบ™เบเบฒเบฅเบฑเบ.

(เบ•เบปเบงเป€เบฅเบ def [1 2 3 4])
(quasiquote (+ (unquote-splice nums)))
;=> (u'+' 1L 2L 3L 4L)

`(+ ~@nums)
;=> (u'+' 1L 2L 3L 4L)

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ
เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ, เบเบปเบเป€เบงเบฑเป‰เบ™เบกเบฑเบ™เบ—เบปเบ”เบชเบญเบšเป€เบกเบทเปˆเบญเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเปƒเบซเป‰ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™
เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบกเบตโ€‹ เบญเบทเปˆเบ™ เบšเบฅเบฑเบญเบเปƒเบ™ a เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ เบกเบฐเบซเบฒเบžเบฒเบ. เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบ‚เบญเบ‡
เบกเบฐเบซเบฒเบžเบฒเบ.

(เป€เบกเบทเปˆเบญเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚)

(เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚ (เป€เบฎเบฑเบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹)โ€‹)

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเบ•เบฑเบ™เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰. เบ•เปเปˆเป„เบ›เบ™เบตเป‰
เบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฐเบญเบญเบ "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!" เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบซเบ™เป‰เบฒโ€‹เบˆเปโ€‹เบขเปˆเบฒเบ‡โ€‹เบšเปเปˆโ€‹เบขเบธเบ”โ€‹เบขเบฑเป‰เบ‡โ€‹:

(เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡ (เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!"))

เบเบฑเบš
เบเบฑเบš เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ•เบฑเบ™เบžเบฒเบเปƒเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™. เบชเบฐเบžเบฒเบšเบเบฒเบ™
เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบ—เปเบฒเบฅเบฒเบเบกเบฑเบ™เบฅเบปเบ‡เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เบงเบšเบ„เบธเบก. เป„เบ”เป‰
เบ•เบปเบงเบขเปˆเบฒเบ‡ archetypical เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เบเบฑเบš เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป„เบŸเบฅเปŒ. เบเบฑเบš เบชเบฒเบกเบฒเบ”เบœเบนเบเบกเบฑเบ”เบšเปเบฅเบดเบšเบปเบ”เป€เบ›เบฑเบ™
เป‚เบ•เป‰เปเบเป‰เบ‡เบซเบผเบทเบšเปเปˆเบชเบปเบ™เปƒเบˆเบกเบฑเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

(เบเบฑเบš [[arg (expr)]] เบšเบฅเบฑเบญเบ)

(เบกเบต [[(expr)]] เบšเบฅเบฑเบญเบ)

(เบกเบต [[arg (expr)] [(expr)]] เบšเบฅเบฑเบญเบ)

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเป€เบ›เบตเบ” เบ‚เปˆเบฒเบง เป„เบŸเบฅเปŒเปเบฅเบฐเบžเบดเบกเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบชเปˆเบซเบ™เป‰เบฒเบˆเป. เป„เบ”เป‰
เป„เบŸเบฅเปŒเบ–เบทเบเบ›เบดเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡.

(เบกเบต [[f (เป€เบ›เบตเบ” "NEWS")]] (เบžเบดเบก (. เบญเปˆเบฒเบ™ f)))

เบเบฑเบš-เบญเบญเบเปเบšเบš
เบเบฑเบš-เบญเบญเบเปเบšเบš เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเปเปˆเบŸเบฑเบ‡เบŠเบฑเบ™เปœเบถเปˆเบ‡เบเบฑเบšเบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡. เบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™
เบเบฒเบ™เบ•เบปเบเปเบ•เปˆเบ‡เบ„เบงเบ™เบเบญเบกเบฎเบฑเบšเบ„เปˆเบฒเบ”เบฝเบง: เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเบ•เบปเบเปเบ•เปˆเบ‡, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆ
function เบเบฑเบš-เบญเบญเบเปเบšเบš เปƒเบŠเป‰เป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™: เบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”
เบเบฒเบ™เบ•เบปเบšเปเบ•เปˆเบ‡เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบ•เบปเบเปเบ•เปˆเบ‡. เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบ•เบปเบšเปเบ•เปˆเบ‡เป„เบ”เป‰เบซเบผเบฒเบเบเบงเปˆเบฒเปœเบถเปˆเบ‡เบญเบฑเบ™
เบ™เบณเปƒเบŠเป‰; เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบ outermost เบเบฑเบš innermost, ie. เบ—เปเบฒเบญเบดเบ”
เป€เบ„เบทเปˆเบญเบ‡เบ•เบปเบšเปเบ•เปˆเบ‡เบˆเบฐเป€เบ›เบฑเบ™เบŠเบฑเป‰เบ™เบ™เบญเบเบ—เบตเปˆเบชเบธเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบœเบนเป‰เบญเบญเบเปเบšเบšเบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆ
เบ„เบทเบเบฑเบšเบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™.

(เบเบฑเบš-decorator decorator-เบกเปˆเบงเบ™
(defn เบšเบฒเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆ [] ... )

(เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบ•เบปเบšเปเบ•เปˆเบ‡1 decorator2...
(defn เบšเบฒเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆ [] ... )

(เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบ•เบปเบšเปเบ•เปˆเบ‡ (decorator arg)..
(defn เบšเบฒเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆ [] ... )

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, inc-decorator เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ decorate เบซเบ™เป‰เบฒเบ—เบตเปˆ เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ เบกเบต
เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบชเบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปเบฅเบฐเป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ•เบปเบเปเบ•เปˆเบ‡เบ”เป‰เบงเบเบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™
incremented เป‚เบ”เบ 1. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ•เบปเบเปเบ•เปˆเบ‡ เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ เบ–เบทเบเป€เบญเบตเป‰เบ™เบ”เป‰เบงเบเบ„เปˆเบฒ 1 เปเบฅเบฐ 1, เบชเบธเบ”เบ—เป‰เบฒเบ
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเป€เบ›เบฑเบ™ 4 (1 + 1 + 1 + 1).

=> (defn inc-decorator [func]
... (fn [value-1 value-2] (func (+ value-1 1) (+ value-2 1))))
=> (defn inc2-decorator [func]
... (fn [value-1 value-2] (func (+ value-1 2) (+ value-2 2))))

=> (with-decorator inc-decorator (defn เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ [ab] (+ ab)))
=> (เบ•เบทเปˆเบก 1 1)
4
=> (with-decorator inc2-decorator inc-decorator
... (defn เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ [ab] (+ ab)))
=> (เบ•เบทเปˆเบก 1 1)
8

with-gensyms
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

with-gensym เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบธเบ”เบ‚เบญเบ‡ gensym เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบกเบฐเบซเบฒเบžเบฒเบ. เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

(with-gensyms [abc]
... )

เบ‚เบฐเบซเบเบฒเบเป„เบ›:

(เปƒเบซเป‰ [[a (gensym)
[b (gensym)
[c (gensym)]]
... )

เป€เบšเบดเปˆเบ‡ เบเบฑเบ‡:
เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ -gensymโ€‹

เบœเบปเบ™เบœเบฐเบฅเบดเบ”
เบœเบปเบ™เบœเบฐเบฅเบดเบ” เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบ. เป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เป„เบŸเบŸเป‰เบฒ
เปเบกเปˆเบ™ iterable เปเบฅเบฐโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เปƒเบ™ loopsโ€‹, เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เปƒเบˆโ€‹เปเบฅเบฐโ€‹เบญเบทเปˆเบ™เป†โ€‹เบ—เบตเปˆโ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹
เบเปเปˆเบชเป‰เบฒเบ‡.

เบŸเบฑเบ‡เบŠเบฑเบ™ เบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบก เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบธเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”
เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบˆเปเบฒเบ™เบงเบ™เบญเบฑเบ™เป€เบ›เบฑเบ™เบ™เบดเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ.

=> (defn เบ„เบนเบ™ [เบ„เปˆเบฒเบชเปเบฒเบ›เบฐเบชเบดเบ”เบ–เบฒเบ™]
... (เบชเปเบฒเบฅเบฑเบš [[(, เบ„เปˆเบฒเบชเปเบฒเบ›เบฐเบชเบดเบ”เบ–เบฒเบ™) (เบ„เปˆเบฒเบชเปเบฒเบ›เบฐเบชเบดเบ”เบ–เบฒเบ™ zip)]]
... (เบœเบปเบ™เบœเบฐเบฅเบดเบ” (* เบ„เปˆเบฒเบชเปเบฒเบ›เบฐเบชเบดเบ”เบ–เบฒเบ™))))

=> (เบ„เบนเบ™ (เป„เบฅเบเบฐ 5) (เป„เบฅเบเบฐ 5))


=> (เบ„เปˆเบฒ list-comp [value (multiply (range 10)) (range 10))])
[0, 1, 4, 9, 16, 25, 36, 49, 64]

=> (เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปเบšเบšเบชเบธเปˆเบก)
=> (defn random-numbers [เบชเบนเบ‡เบ•เปˆเปเบฒ]
... (เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ True (เบœเบปเบ™เบœเบฐเบฅเบดเบ” (.random random เบ•เปˆเปเบฒเบชเบนเบ‡))))
=> (list-comp x [x (เป€เบญเบปเบฒ 15 (random-เบ•เบปเบงเป€เบฅเบ 1 50))])])
[7, 41, 6, 22, 32, 17, 5, 38, 18, 38, 17, 14, 23, 23, 19]

เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบˆเบฒเบ
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.13.

เบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ 3.3 เปเบฅเบฐ UP เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™!

เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบˆเบฒเบ เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป‚เบ—เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบเปˆเบญเบ. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ coroutine เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
เบชเบฒเบกเบฒเบ”เบกเบญเบšเบซเบกเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเป‰เบเบฑเบš coroutine เบญเบทเปˆเบ™, เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบ–เป‰เบฒเปƒเบŠเป‰เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:
เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™.

Hy Core
Core เบซเบ™เป‰เบฒเบ—เบตเปˆ
butlast
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เปเบ•เปˆเบชเบธเบ”เบ—เป‰เบฒเบ coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบขเป‰เบญเบ™เบซเบผเบฑเบ‡เบ‚เบญเบ‡เบ—เบฑเบ‡เปเบปเบ” เบเบปเบเป€เบงเบฑเป‰เบ™เบฅเบฒเบเบเบฒเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™ coll.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (butlast (เป„เบฅเบเบฐ 10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (butlast [1]))
[]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (butlast []))
[]

=> (เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ itertools)
=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 5 (butlast (itetools.count 10))))
[10, 11, 12, 13, 14]

เบ„เป?
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ„เป? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™ iterable เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบชเบฒเบ.

=> (เบ„เปเบฅ? [1 2 3 4])
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (coll? {"a" 1 "b" 2})
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (coll? "abc")
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

cons
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ‚เปเป‰เป€เบชเบ a b)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบ•เบฒเบฅเบฒเบ‡เบ‚เปเป‰เป€เบชเบเปƒเปเปˆเบเบฑเบšเบฅเบปเบ” a เปเบฅเบฐ cdr b.

=> (setv a (cons 'hd 'tl))

=> (= 'hd (เบฅเบปเบ” a))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (= 'tl (cdr a))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบ‚เปเป‰เป€เบชเบ?
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ‚เปเป‰เป€เบชเบ? เบŸเบน)

เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ เบŸเบน เป€เบ›เบฑเบ™เบˆเบธเบฅเบฑเบ‡ cons.

=> (setv a (cons 'hd 'tl))

=> (เบ‚เปเป‰เป€เบชเบ? a)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ‚เปเป‰เป€เบชเบ? nil)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบ‚เปเป‰เป€เบชเบ? [1 2 3])
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

Dec
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ—เบฑเบ™เบงเบฒ x)

เบชเบปเปˆเบ‡เบ„เบทเบ™เปœเบถเปˆเบ‡เปœเป‰เบญเบเบเบงเปˆเบฒ x. เป€เบ—เบปเปˆเบฒเบเบฑเบš (- x 1). เบเบปเบเบชเบนเบ‡ เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” if (เบšเปเปˆเปเบกเปˆเบ™ (เบ•เบปเบงเป€เบฅเบ? x)).

=> (เบงเบฑเบ™เบ—เบต 3 เบ—เบฑเบ™เบงเบฒ)
2

=> (เบงเบฑเบ™เบ—เบต 0 เบ—เบฑเบ™เบงเบฒ)
-1

=> (เบงเบฑเบ™เบ—เบต 12.3 เบ—เบฑเบ™เบงเบฒ)
11.3

disassemble
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ–เบญเบ”เบ›เบฐเบเบญเบš เป€เบ›เบฑเบ™เป„เบกเป‰เบขเบทเบ™เบ•เบปเป‰เบ™ &เบ—เบฒเบ‡เป€เบฅเบทเบญเบ [เบฅเบฐเบซเบฑเบ” เบœเบดเบ”])

เบ–เบดเป‰เบก Python AST เบชเปเบฒเบฅเบฑเบš Hy เป€เบ›เบฑเบ™เป„เบกเป‰เบขเบทเบ™เบ•เบปเป‰เบ™ เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เบ–เป‰เบฒ codegen is เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบซเบ™เป‰เบฒเบ—เบตเปˆ
เบžเบดเบกเบฅเบฐเบซเบฑเบ” Python เปเบ—เบ™.

=> ( disassemble '(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!"))
เป‚เบกเบ”เบนเบ™(
เบฎเปˆเบฒเบ‡เบเบฒเบ=[
Expr(value=Call(func=Name(id='print'), args=[Str(s='Hello World!')], keywords=[], starargs=None, kwargs=None)])

=> ( disassemble '(เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!") เบ„เบงเบฒเบกเบˆเบดเบ‡)
เบžเบดเบก('เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!')

เบซเบงเปˆเบฒเบ‡?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบซเบงเปˆเบฒเบ‡? coll)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if coll เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เป€เบ—เบปเปˆเบฒเบเบฑเบš (= 0 (เป€เบฅเบ™ coll)).

=> (เบซเบงเปˆเบฒเบ‡? [])
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เป€เบ›เบปเปˆเบฒ? "")
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบซเบงเปˆเบฒเบ‡? (, 1 2))
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบ—เบธเบเป†?
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ—เบธเบเป†? เบ„เบฒเบ” coll)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if (เบฅเปˆเบงเบ‡ x) เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป† x in coll, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ—เบตเปˆเบขเบนเปˆ เบเบฑเบšเบ„เบทเบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡
if coll เปเบกเปˆเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

=> (เบ—เบธเบ? เปเบกเป‰เปเบ•เปˆ? [2 4 6])
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ—เบธเบ? เปเบกเป‰เปเบ•เปˆ? [1 3 5])
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบ—เบธเบ? เปเบกเป‰เปเบ•เปˆ? [2 4 5])
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบ—เบธเบ? เป€เบ–เบดเบ‡เปเบกเปˆเบ™? [])
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบฅเบญเบ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบฅเบญเบ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™เบเบฒเบ™เบฅเบญเบ.

=> (เป€เบฅเบทเปˆเบญเบ™? 3.2)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เป€เบฅเบทเปˆเบญเบ™? -2)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เปเบกเป‰เปเบ•เปˆ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™เปเบกเป‰เปเบ•เปˆ. เบเบปเบเบชเบนเบ‡ เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” if (เบšเปเปˆเปเบกเปˆเบ™ (เบ•เบปเบงเป€เบฅเบ? x)).

=> (เปเบกเป‰เปเบ•เปˆ? 2)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เปเบกเป‰เปเบ•เปˆ? 13)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เปเบกเป‰เปเบ•เปˆ? 0)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

identity
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ•เบปเบงเบ•เบปเบ™ x)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบญเบฒเบเบดเบงเป€เบกเบฑเบ™เบ—เบตเปˆเบชเบฐเปœเบญเบ‡เปƒเบซเป‰เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™.

=> (เบ•เบปเบงเบ•เบปเบ™ 4)
4

=> (เบฅเบฒเบเบŠเบทเปˆ (เบ•เบปเบงเบ•เบปเบ™เปเบœเบ™เบ—เบตเปˆ [1 2 3 4]))
[1 2 3 4]

inc
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (inc x)

เปƒเบซเป‰เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบฒเบเบเปˆเบงเบฒ x. เป€เบ—เบปเปˆเบฒเบเบฑเบš (+ x 1). เบเบปเบเบชเบนเบ‡ เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” if (เบšเปเปˆเปเบกเปˆเบ™ (เบ•เบปเบงเป€เบฅเบ? x)).

=> (inc 3)
4

=> (inc 0)
1

=> (inc 12.3)
13.3

เบ•เบปเบงเบขเปˆเบฒเบ‡?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ•เบปเบงเบขเปˆเบฒเบ‡? เบฅเบฐเบ”เบฑเบš x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ เบฅเบฐเบ”เบฑเบš.

=> (เบ•เบปเบงเบขเปˆเบฒเบ‡? float 1.0)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ•เบปเบงเบขเปˆเบฒเบ‡? int 7)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ•เบปเบงเบขเปˆเบฒเบ‡? str (str "foo"))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (defclass TestClass [object])
=> (setv inst (TestClass))
=> (เบ•เบปเบงเบขเปˆเบฒเบ‡? TestClass inst)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เป€เบ›เบฑเบ™เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก. เบชเปเบฒเบฅเบฑเบš Python 2, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™ int or เบเบฒเบง. เบชเปเบฒเบฅเบฑเบš Python 3,
เบ™เบตเป‰โ€‹เปเบกเปˆเบ™ int.

=> (เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก? 3)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก? -2.4)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เปเบŠเบเปเบŠเบ‡
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.1.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เปเบŠเบเปเบŠเบ‡ seq1 seq2 ... )

เปƒเบซเป‰เบœเบปเบ™เป€เบ›เบฑเบ™เบญเบฑเบ™เบŠเป‰เบณเบเบฑเบ™เบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™เบ—เบณเบญเบดเบ”เปƒเบ™เปเบ•เปˆเบฅเบฐเบฅเบณเบ”เบฑเบš, เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

=> (เบฅเบฒเบเบเบฒเบ™ (เป„เบฅเบเบฐ 5) (เป„เบฅเบเบฐ 100 105)))
[0, 100, 1, 101, 2, 102, 3, 103, 4]

=> (เบฅเบฒเบเบเบฒเบ™ (เป„เบฅเบเบฐ 1000000) "abc"))
[0, 'a', 1, 'b', 2, 'c']

เปเบŠเบเปเบŠเบ‡
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.1.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (interpose เบฅเบฒเบเบเบฒเบ™ seq)

เปƒเบซเป‰เบœเบปเบ™เป€เบ›เบฑเบ™เบญเบฑเบ™เบŠเป‰เบณเบเบฑเบ™เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบฅเบณเบ”เบฑเบšเบ—เบตเปˆเปเบเบเบเบฑเบ™เป‚เบ”เบเบฅเบฒเบเบเบฒเบ™.

=> (เบฅเบฒเบเบŠเบทเปˆ (interpose "!" "abcd"))
['เบโ€‹เบ‚โ€‹เบ„โ€‹เบ‡']

=> (เบฅเบฒเบเบเบฒเบ™ (interpose -1 (เป„เบฅเบเบฐ 5)))
[0, -1, 1, -1, 2, -1, 3, -1, 4]

เบŠเป‰เบณเบšเปเปˆเปœเบณ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เป€เบฎเบฑเบ”เป„เบ”เป‰เบšเป? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™ iterable. Iterable objects เบเบฑเบšเบ„เบทเบ™เบกเบฒเป€เบ›เบฑเบ™ iterator เปƒเปเปˆเป€เบกเบทเปˆเบญ (เบกเบฑเบ™ x) is
เป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบš เบœเบนเป‰เป€เบฎเบฑเบ”เบŠเป‰เบณ?.

=> ;; เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบšเบชเบฒเบ
=> (เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰? (str "abcde"))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบเบฒเบ™
=> (เป€เบฎเบฑเบ”เป„เบ”เป‰เบšเปเปˆ? [1 2 3 4 5])
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบš tuples
=> (เป€เบฎเบฑเบ”เป„เบ”เป‰เบšเปเปˆ? (, 1 2 3))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบš dicts
=> (เป€เบฎเบฑเบ”เป„เบ”เป‰เบšเป? {:a 1 :b 2 :c 3})
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบš iterators / generators
=> (เป€เบฎเบฑเบ”เบŠเป‰เบณเป„เบ”เป‰เบšเป? (เบŠเป‰เบณ 3))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบœเบนเป‰เป€เบฎเบฑเบ”เบŠเป‰เบณ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบœเบนเป‰เป€เบฎเบฑเบ”เบŠเป‰เบณ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เป€เบ›เบฑเบ™เบœเบนเป‰เป€เบฎเบฑเบ”เบŠเป‰เบณ. Iterators เปเบกเปˆเบ™เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบเบฑเบšเบ„เบทเบ™เบ•เบปเบ™เป€เบญเบ‡เป€เบ›เบฑเบ™
iterator เป€เบกเบทเปˆเบญ (เบกเบฑเบ™ x) เป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบš เบŠเป‰เบณเบšเปเปˆเปœเบณ?.

=> ;; เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ
=> ( เบ—เบปเบ”เบชเบฐเบงเบฑเบ”? [1 2 3 4 5])
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> ;; เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš iter เบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ
=> (iter? (iter [1 2 3 4 5]))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบš dict
=> (เบ•เบปเบงเบŠเบตเป‰เบšเบญเบ? {:a 1 :b 2 :c 3})
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> ;; เบชเป‰เบฒเบ‡ iterator เบˆเบฒเบ dict เป„เบ”เป‰
=> (iter? (iter {:a 1 :b 2 :c 3}))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบฅเบฒเบเบŠเบทเปˆ*
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบฅเบฒเบเบŠเบทเปˆ* เบซเบปเบงเบซเบ™เป‰เบฒ &เบžเบฑเบเบœเปˆเบญเบ™ เบซเบฒเบ‡)

เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ‚เบญเบ‡เป€เบŠเบฅ cons เบŠเป‰เบญเบ™ (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบˆเบธเบ”) เบ—เบตเปˆเบกเบต arguments. เบ–เป‰เบฒ
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ argument เบžเบฝเบ‡เปเบ•เปˆเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบซเบ™เบถเปˆเบ‡, เบชเบปเปˆเบ‡เบ„เบทเบ™เบกเบฑเบ™.

=> (เบฅเบฒเบเบเบฒเบ™* 1 2 3 4)
(1 2 3. 4)

=> (เบฅเบฒเบเบเบฒเบ™* 1 2 3 [4])
[1, 2, 3, 4]

=> (เบฅเบฒเบเบŠเบทเปˆ* 1)
1

=> (cons? (เบฅเบฒเบเบเบฒเบ™* 1 2 3 4))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบ‚เบฐเบซเบเบฒเบเบกเบฐเบซเบฒเบžเบฒเบ
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ‚เบฐเบซเบเบฒเบเบกเบฐเบซเบฒเบžเบฒเบ เปเบšเบšเบŸเบญเบก)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบกเบฐเบซเบฒเบžเบฒเบเบญเบฑเบ™เป€เบ•เบฑเบกเบ—เบตเปˆเบ‚เบญเบ‡ เบฎเบนเบšเปเบšเบš.

=> (macroexpand '(-> (ab) (xy)))
(u'x' (u'a' u'b') u'y')

=> (macroexpand '(-> (ab) (-> (cd) (ef))))
(u'e' (u'c' (u'a' u'b') u'd') u'f')

macroexpand-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 val-in-เบœเบปเบ™ val-in-latter).

=> (merge-with (fn [xy] (+ xy)) {"a" 10" b" 20} {"a" 1 "c" 30})
{u'a': 11L, u'c': 30L, u'b': 20L}

เบšเปเปˆ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบšเปเปˆ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™เบซเบ™เป‰เบญเบเบเบงเปˆเบฒเบชเบนเบ™. เบเบปเบเบชเบนเบ‡ เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” if (เบšเปเปˆเปเบกเปˆเบ™ (เบ•เบปเบงเป€เบฅเบ? x)).

=> (เบšเปเปˆ? -2)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบšเปเปˆ? 3)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบšเปเปˆ? 0)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบšเปเปˆ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบšเปเปˆ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x is nil / เบšเปเปˆเบกเบต.

=> (nil? nil)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (nil? none)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบšเปเปˆ? 0)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (setf x nil)
=> (nil? x)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; list.append เบชเบฐเป€เบซเบกเบตเบเบฑเบšเบ„เบทเบ™เบšเปเปˆเบกเบต
=> (nil? (. append [1 2 3] 4))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบšเปเปˆเบกเบต?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบšเปเปˆ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x is เบšเปเปˆเบกเบต.

=> (เบšเปเปˆ? เบšเปเปˆเบกเบต)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบšเปเปˆ? 0)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (setf x เบšเปเปˆเบกเบต)
=> (เบšเปเปˆ? x)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> ;; list.append เบชเบฐเป€เบซเบกเบตเบเบฑเบšเบ„เบทเบ™เบšเปเปˆเบกเบต
=> (เบšเปเปˆ? (. เบ•เบทเปˆเบก [1 2 3] 4))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบ™
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ—เบต coll n &เบ—เบฒเบ‡เป€เบฅเบทเบญเบ [เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ nil])

เบเบฑเบšเบ„เบทเบ™ n-th item in a collection, counting from 0. เบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, nil, เบ–เป‰เบฒ
เบญเบญเบเบˆเบฒเบเบ‚เบญเบšเป€เบ‚เบ” (เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เป€เบ›เบฑเบ™เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™). เบเบปเบเบชเบนเบ‡ เบ„เปˆเบฒเบœเบดเบ”เบžเบฒเบ” if n เปเบกเปˆเบ™เบ—เบฒเบ‡เบฅเบปเบš.

=> (เบ™เบ— [1 2 4 7] 1)
2

=> (เบ™เบ— [1 2 4 7] 3)
7

=> (nil? (เบ™เบ— [1 2 4 7] 5))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ—เบต [1 2 4 7] 5 "เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™")
'เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™'

=> (nth (เป€เบญเบปเบฒ 3 (เบฅเบปเบ‡ 2 [1 2 3 4 5 6])) 2))
5

=> (เบ™เบ— [1 2 4 7] -1)
Traceback (เบเบฒเบ™เป‚เบ—เบซเบผเป‰เบฒเบชเบธเบ”เบชเบธเบ”เบ—เป‰เบฒเบ):
...
ValueError: Indices for islice() เบˆเบฐเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™ None เบซเบผเบท integer: 0 <= x <= sys.maxsize.

เบ•เบปเบงเป€เบฅเบ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ•เบปเบงเป€เบฅเบ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบ, เบ•เบฒเบกเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ Python's เบ•เบปเบงเป€เบฅเบ เบŠเบฑเป‰เบ™เบฎเบฝเบ™.

=> (เบ•เบปเบงเป€เบฅเบ? -2)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ•เบปเบงเป€เบฅเบ? 3.2)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ•เบปเบงเป€เบฅเบ? "foo")
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบ„เบตเบ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ„เบตเบ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เบ„เบตเบ. เบเบปเบเบชเบนเบ‡ เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” if (เบšเปเปˆเปเบกเปˆเบ™ (เบ•เบปเบงเป€เบฅเบ? x)).

=> (เบ„เบตเบ? 13)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบ„เบตเบ? 2)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบ„เบตเบ? 0)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

pos?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เป‚เบžเบ”? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒเบชเบนเบ™. เบเบปเบเบชเบนเบ‡ เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” if (เบšเปเปˆเปเบกเปˆเบ™ (เบ•เบปเบงเป€เบฅเบ? x)).

=> (เป‚เบžเบช? 3)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เป‚เบžเบ”? -2)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เป‚เบžเบช? 0)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ—เบตเบชเบญเบ‡ coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบฐเบกเบฒเบŠเบดเบเบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡ coll. เป€เบ—เบปเปˆเบฒเบเบฑเบš (เป„เบ”เป‰เบฎเบฑเบš coll 1).

=> (เบงเบดเบ™เบฒเบ—เบต [0 1 2])
1

เบšเบฒเบ‡
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบšเบฒเบ‡ เบ„เบฒเบ” coll)

เปƒเบซเป‰เบœเบปเบ™เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™-เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบณเบญเบดเบ”เบ‚เบญเบ‡ (เบฅเปˆเบงเบ‡ x) เบชเบณ เบฅเบฑเบšเปƒเบ”เป† x in coll, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ nil.
Return nil if coll เปเบกเปˆเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

=> (เบšเบฒเบ‡เบญเบฑเบ™? [2 4 6])
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (nil? (เบšเบฒเบ‡เบญเบฑเบ™เปเบกเปˆเบ™? [1 3 5]))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (nil? (เบšเบฒเบ‡เบ•เบปเบงเบ•เบปเบ™ [0 "" []]))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบšเบฒเบ‡เบ•เบปเบงเบ•เบปเบ™ [0 "เบšเปเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ" []])
'เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบšเปเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ'

=> (nil? (เบšเบฒเบ‡โ€‹เบ„เบปเบ™โ€‹เปเบกเปˆเบ™โ€‹เปเบ•เปˆ? []))
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบชเบฒเบ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบชเบฒเบ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เป€เบ›เบฑเบ™เบชเบฒเบ.

=> (string? "foo")
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบชเบฐเบ•เบฃเบดเบ‡? -2)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบชเบฑเบ™เบเบฒเบฅเบฑเบ?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบชเบฑเบ™เบเบฒเบฅเบฑเบ? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เป€เบ›เบฑเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบ.

=> (เบชเบฑเบ™เบเบฒเบฅเบฑเบ? 'foo)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

=> (เบชเบฑเบ™เบเบฒเบฅเบฑเบ? '[abc])
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบชเบนเบ™?
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบชเบนเบ™? x)

เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ if x เปเบกเปˆเบ™เบชเบนเบ™.

=> (เบชเบนเบ™? 3)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบชเบนเบ™? -2)
เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

=> (เบชเบนเบ™? 0)
เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบฅเปเบฒเบ”เบฑเบš เบซเบ™เป‰เบฒเบ—เบตเปˆ
เบŸเบฑเบ‡เบŠเบฑเบ™เบฅเปเบฒเบ”เบฑเบšเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบซเบผเบทเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเบกเบตเบ—เปˆเบฒเปเบฎเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบต
เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบฅเปเบฒเบ”เบฑเบšเบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบชเปˆเบงเบ™เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบซเบผเบทเบšเบฑเบ™เบˆเบธเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบ
เบชเบปเปˆเบ‡เบ„เบทเบ™ Python iterator.

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เป€เบฅเบ Fibonacci infinite canonical เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰
เบšเบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

(defn fib []
(เบŠเบธเบ” a 0)
(เบŠเบธเบ” b 1)
(เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡
(เบœเบปเบ™เบœเบฐเบฅเบดเบ” เบ)
(setv (, ab) (, b (+ ab)))))

เบซเบกเบฒเบเป€เบซเบ” (เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ ... ) เบงเบปเบ‡. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ™เบตเป‰เปƒเบ™ REPL,

=> (fib)


เบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเบ›เปˆเบฝเบ™เปเบ—เบ™, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบœเบปเบ™เบˆเบปเบ™เบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเบฅเบดเป‚เบžเบเบกเบฑเบ™.
เบžเบฐเบเบฒเบเบฒเบกเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เป€เบ›เบฑเบ™ loop infinite เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบˆเบปเบ™เบเปˆเบงเบฒเบกเบฑเบ™
เปƒเบŠเป‰ RAM เบ—เบตเปˆเบกเบตเบขเบนเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบซเบผเบทเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบˆเบปเบ™เบเปˆเบงเบฒเบ‚เป‰เบญเบเบ‚เป‰เบฒเบกเบฑเบ™.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (fib))
[1โ€‹] 91474 เบ‚เป‰เบฒ hyโ€‹

เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบ•เบปเบงเป€เบฅเบ Fibonacci 10 เป‚เบ•เบ—เบณเบญเบดเบ”, เปƒเบซเป‰เปƒเบŠเป‰ เปƒเบŠเป‰เป€เบงเบฅเบฒ. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ เปƒเบŠเป‰เป€เบงเบฅเบฒ เบเบฑเบ‡เบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบ„เบทเปˆเบญเบ‡เบ›เบฑเปˆเบ™เป„เบŸ,
เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบˆเบฒเบเบกเบฑเบ™.

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 10 (fib)))
[0, 1, 1, 2, 3, 5, 8, 13, 21]

เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบ•เบปเบงเป€เบฅเบ Fibonacci เบขเบนเปˆเบ”เบฑเบ”เบŠเบฐเบ™เบต 9, (เป€เบฅเบตเปˆเบกเบˆเบฒเบ 0):

=> (เบ—เบต (fib) 9)
34

เบงเบปเบ‡เบˆเบญเบ™
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบฎเบญเบšเบงเบฝเบ™ coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบŠเปเป‰เบฒเบ„เบทเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡ coll.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 7 (เบงเบปเบ‡เบˆเบญเบ™ [1 2 3])))
[1, 2, 3, 1, 2, 3, 1]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 2 (เบงเบปเบ‡เบˆเบญเบ™ [1 2 3])))
[1, 2]

เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™ coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบชเบฐเบกเบฒเบŠเบดเบเบ—เบตเปˆเบšเปเปˆเบŠเปเป‰เบฒเบเบฑเบ™เปƒเบ™ coll.

=> (เบฅเบฒเบเบŠเบทเปˆ (เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ [ 1 2 3 4 3 5 2 ]))
[1, 2, 3, 4, 5]

=> (เบฅเบฒเบเบŠเบทเปˆ (เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ []))
[]

=> (เบฅเบฒเบเบŠเบทเปˆ (เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡ (iter [ 1 2 3 4 3 5 2 ])))
[1, 2, 3, 4, 5]

เบงเบฒเบ‡
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบฅเบปเบ‡ n coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบ„เบทเปˆเบญเบ‡เป€เบฎเบฑเบ”เบŠเป‰เบณ, เบ‚เป‰เบฒเบกเบญเบฑเบ™เบ—เบณเบญเบดเบ” n เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡ coll. เบเบปเบเบชเบนเบ‡ เบ„เปˆเบฒเบœเบดเบ”เบžเบฒเบ” 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 coll)

เบ•เบญเบšเป‚เบ•เปเบ—เบ™เบ—เบตเปˆเบ—เบฑเบ‡เปเบปเบ” เบเบปเบเป€เบงเบฑเป‰เบ™เบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ n เบฅเบฒเบเบเบฒเบ™เปƒเบ™ coll. เบเบปเบเบชเบนเบ‡ เบ„เปˆเบฒเบœเบดเบ”เบžเบฒเบ” if n is
เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบš.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป€เบฅเบทเปˆเบญเบ™ 5 เบชเบธเบ”เบ—เป‰เบฒเบ (เป„เบฅเบเบฐ 10 20)))
[10, 11, 12, 13, 14]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป€เบฅเบทเปˆเบญเบ™ - เบชเบธเบ”เบ—เป‰เบฒเบ 0 (เป„เบฅเบเบฐ 5)))
[0, 1, 2, 3, 4]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป€เบฅเบทเปˆเบญเบ™ - เบชเบธเบ”เบ—เป‰เบฒเบ 100 (เป„เบฅเบเบฐ 100)))
[]

=> (เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ itertools)
=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 5 (เบฅเบธเบ”เบฅเบปเบ‡ 100 เบชเบธเบ”เบ—เป‰เบฒเบ (itetools.count 10))))
[10, 11, 12, 13, 14]

เบฅเบธเบ”เบฅเบปเบ‡
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹เปƒเบ™โ€‹เบ‚เบฐโ€‹เบ™เบฐโ€‹เบ—เบตเปˆโ€‹ เบ„เบฒเบ” coll)

เบชเบปเปˆเบ‡โ€‹เบœเบปเบ™โ€‹เป€เบ›เบฑเบ™ iterator, เบ‚เป‰เบฒเบกโ€‹เบชเบฐโ€‹เบกเบฒโ€‹เบŠเบดเบโ€‹เบ‚เบญเบ‡ coll เบˆเบปเบ™เบเปˆเบงเบฒ เบ„เบฒเบ” is เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (drop-while even? [2 4 7 8 9]))
[7, 8, 9]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ ( drop-while เบ•เบปเบงเป€เบฅเบ? [1 2 3 เบšเปเปˆเบกเบต "a"])))
[เบšเปเปˆเบกเบต, u'a']

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (drop-while pos? [2 4 7 8 9]))
[]

เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ เบ„เบฒเบ” coll)

เบ•เบญเบšเป‚เบ•เปเบ—เบ™เบ—เบตเปˆเบชเบณเบฅเบฑเบšเบฅเบฒเบเบเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™ coll เบ—เบตเปˆเบœเปˆเบฒเบ™เบเบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™ เบ„เบฒเบ”.

เป€เบšเบดเปˆเบ‡ เป€เบญเบปเบฒ.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ pos? [1 2 3 -4 5 -7]))
[1, 2, 3, 5]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เป€เบ–เบดเบ‡เปเบกเปˆเบ™? [1 2 3 -4 5 -7]))
[2, -4]

เปเบšเบ™
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เปเบ› coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฒเบเบเบฒเบ™เบ”เบฝเบงเบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™ coll, เป‚เบ”เบเบเบฒเบ™เปเบ›เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ—เบฑเบ‡เปเบปเบ” เปเบฅเบฐ/เบซเบผเบท
tuples.

=> (เปเบ› [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, 'เบšเบฒ']

เป€เบฎเบฑเบ”เบŠเป‰ เบณ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เป€เบฎเบฑเบ”เบŠเป‰เบณ fn x)

เบ•เบญเบšเป‚เบ•เปเบ—เบ™เบ‚เบญเบ‡ x, fn(x), fn(fn(x)), เปเบฅเบฐเบญเบทเปˆเบ™เป†

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 5 (iterate inc 5)))
[5, 6, 7, 8, 9]

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 5 (iterate (fn [x] (* xx)) 5)))
[5, 25, 625, 390625, 152587890625]

เบญเปˆเบฒเบ™
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบญเปˆเบฒเบ™ &เบ—เบฒเบ‡เป€เบฅเบทเบญเบ [เบˆเบฒเบเป„เบŸเบฅเปŒ eof])

เบญเปˆเบฒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ Hy เบ•เปเปˆเป„เบ›เบˆเบฒเบ เบˆเบฒเบเป„เบŸเบฅเปŒ (เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™ sys.stdin), เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒ a
single byte เป€เบ›เบฑเบ™ EOF (เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™ string เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ). เบเบปเบเบชเบนเบ‡ EOFError if เบˆเบฒเบเป„เบŸเบฅเปŒ เบชเบดเป‰เบ™เบชเบธเบ”เบเปˆเบญเบ™
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ.

=> (เบญเปˆเบฒเบ™)
(+ 2 2)
('+' 2 2)
=> (eval (เบญเปˆเบฒเบ™))
(+ 2 2)
4

=> (เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ io)
=> (def buffer (io.StringIO "(+ 2 2)\n(- 2 1)"))
=> (eval (เบ™เบณเปƒเบŠเป‰เบญเปˆเบฒเบ™ [] {"from_file" buffer}))
4
=> (eval (เบ™เบณเปƒเบŠเป‰เบญเปˆเบฒเบ™ [] {"from_file" buffer}))
1

=> ; เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ "example.hy" เบ›เบฐเบเบญเบšเบกเบต:
=> ; (เบžเบดเบก "เบชเบฐเบšเบฒเบเบ”เบต")
=> ; (เบžเบดเบก "เปเบŸเบ™!")
=> (เบ”เป‰เบงเบ [[f (เป€เบ›เบตเบ” "example.hy")]]
... (เบžเบฐเบเบฒเบเบฒเบก
... (เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡
... (เปƒเบซเป‰ [[exp (เบญเปˆเบฒเบ™ f)]]
... (เป€เบฎเบฑเบ”
... (เบžเบดเบก "OHY" exp)
... (eval exp))))
... (เบˆเบฑเบš [e EOFError]
... (เบžเบดเบก "EOF!"))))
เป‚เบญเป‰เบ ('เบžเบดเบก' 'เบชเบฐเบšเบฒเบเบ”เบต')
เบชเบฐเบšเบฒเบเบ”เบต
เป‚เบญเป‰เบ ('เบžเบดเบก' 'เปเบŸเบ™!')
เปเบŸเบ™!
EOF!

เป€เบญเบปเบฒ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เป€เบญเบปเบฒเบญเบญเบ เบ„เบฒเบ” coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบ•เบปเบงเปเบ›เบˆเบฒเบ coll เบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบœเปˆเบฒเบ™เบเบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™, เบ„เบฒเบ”, เป€เบญเบปเบฒเบญเบญเบ.

เป€เบšเบดเปˆเบ‡ เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒเบ„เบตเบ? [1 2 3 4 5 6 7]))
[2, 4, 6]

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เบฅเบปเบš pos? [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")))
[u's', u's', u's', u's', u's', u's']

repeatedly
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบŠเป‰เบณเป† fn)

เบชเบปเปˆเบ‡โ€‹เบ„เบทเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบŠเป‰เบณโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เป‚เบ— fn repeatedly

=> (เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ [random [randint]])

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 5 (เบŠเป‰เบณเป† (fn [] (randint 0 10)))))
[6, 2, 0, 6, 7]

เปƒเบŠเป‰เป€เบงเบฅเบฒ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เป€เบญเบปเบฒ n coll)

เปƒเบซเป‰เบœเบปเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเบ›เปˆเบฝเบ™เปเบ—เบ™เบ—เบตเปˆเบšเบฑเบ™เบˆเบธเบญเบฑเบ™เบ—เบณเบญเบดเบ” n เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡ coll. เบเบปเบเบชเบนเบ‡ เบ„เปˆเบฒเบœเบดเบ”เบžเบฒเบ” if n is
เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบš.

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 3 [1 2 3 4 5]))
[1, 2, 3]

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 4 (เป€เบฎเบฑเบ”เบŠเป‰เบณ "s")))
[u's', u's', u's', u's]

=> (เบฅเบฒเบเบŠเบทเปˆ (เป€เบญเบปเบฒ 0 (เป€เบฎเบฑเบ”เบŠเป‰เบณ "s")))
[]

เป€เบญเบปเบฒเบญเบฑเบ™เบ—เบต
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบ•เบญเบ™เบ—เบต n coll)

เปƒเบซเป‰เบœเบปเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเบขเป‰เบญเบ™เบซเบผเบฑเบ‡เบ—เบตเปˆเบกเบตเบ—เบธเบเป† n- เบชเบฐโ€‹เบกเบฒโ€‹เบŠเบดเบโ€‹เบ—เบตโ€‹ coll.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (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]

เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ เบ„เบฒเบ” coll)

เบชเบปเปˆเบ‡เบ„เบทเบ™เบ•เบปเบงเปเบ›เบˆเบฒเบ coll เป€เบ›เบฑเบ™ เบ„เบฒเบ” เบเบฑเบšเบ„เบทเบ™เบกเบฒ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ pos? [ 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 ]))
[]

zip เบเบฑเบš
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.13.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (zipwith fn coll ... )

เป€เบ—เบปเปˆเบฒเบเบฑเบš เป„เบ›เบชเบฐเบ™เบต, เปเบ•เปˆเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบซเบผเบฒเบ argument เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡ tuple. เบ–เป‰เบฒ
zip เบเบฑเบš เป€เบญเบตเป‰เบ™เบงเปˆเบฒ N collections, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ fn เบ•เป‰เบญเบ‡เบเบญเบกเบฎเบฑเบš N arguments.

=> (เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ)
=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (zipwith operator.add [1 2 3] [4 5 6]))
[5, 7, 9]

Reader เบกเบฒเป‚เบ„เบฃ
เบกเบฐเบซเบฒเบžเบฒเบเบ‚เบญเบ‡เบœเบนเป‰เบญเปˆเบฒเบ™เปƒเบซเป‰ Lisp เบกเบตเบญเปเบฒเบ™เบฒเบ”เปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡ syntax เปƒเบ™เบ—เบฑเบ™เบ—เบต. เป€เบˆเบปเป‰เบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™
เบซเบกเบฒเบเป€เบซเบ”เป‚เบ›เป‚เบฅเบ? เบกเบฐเบซเบฒเบžเบฒเบเบœเบนเป‰เบญเปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. เบ•เป‰เบญเบ‡เบเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™ Clojure เบ‚เบญเบ‡เบเบฒเบ™เบกเบต
regex? เบกเบฐเบซเบฒเบžเบฒเบเบœเบนเป‰เบญเปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ.

syntax
=> (defreader ^ [expr] (เบžเบดเบก expr))
=> #^(1 2 3 4)
( 1 2 3 4 )
=> #^ "เบชเบฐเบšเบฒเบเบ”เบต"
"เบชเบฐเบšเบฒเบเบ”เบต"
=> #^1+2+3+4+3+2
1+2+3+4+3+2

Hy เบšเปเปˆเบกเบตเบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเบชเปเบฒเบฅเบฑเบš tuples. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบกเบฑเบ (, ... ) เปเบฅเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเบฑเบ™เบญเบทเปˆเบ™. เบ™เบตเป‰
เป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบœเบนเป‰เบญเปˆเบฒเบ™เบกเบฐเบซเบฒเบžเบฒเบเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบฅเบฐเบšเบฝเบš.

=> (defreader t [expr] `(, ~@expr))
=> #t(1 2 3)
(1, 2, 3)

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบกเบฑเบ™เบ„เบทเบเบฑเบš Clojure เปเบฅเบฐเบกเบตเบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด!

=> (เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบซเบกเปˆ)
=> (defreader r [expr] `(re.compile ~expr))
=> #r "*"
<_sre.SRE_Pattern object at 0xcv7713ph15#>

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”
เบœเบนเป‰โ€‹เบฅเบฐโ€‹เป€เบกเบตเบ” เปƒเบŠเป‰เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เบฝเบงเป€เบ›เบฑเบ™เบŠเบทเปˆเบชเบฑเบ™เบเบฒเบฅเบฑเบเบชเปเบฒเบฅเบฑเบš macro เบœเบนเป‰เบญเปˆเบฒเบ™; เบซเบเบฑเบ‡เบญเบตเบเปเบฅเป‰เบง
เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”. เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบขเปˆเบฒเบ‡โ€‹เบชเบฐโ€‹เบซเบฅเบฒเบ”โ€‹, เบœเบนเป‰โ€‹เบฅเบฐโ€‹เป€เบกเบตเบ” เบ‚เบฐเบซเบเบฒเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ lambda เบ—เบตเปˆเบ›เบปเบเบ„เบธเบกเบ”เป‰เบงเบ a
เบญเบญเบเปเบšเบš. เป€เบ„เบทเปˆเบญเบ‡เบ•เบปเบเปเบ•เปˆเบ‡เบ™เบตเป‰เบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ” lambda เปƒเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ—เบตเปˆเบกเบตเบŠเบทเปˆเป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐ
เบชเบฑเบ™เบเบฒเบฅเบฑเบ.

=> (defreader ^ [expr] (เบžเบดเบก expr))
;=> (with_decorator (hy.macros.reader ^) (fn [expr] (เบžเบดเบก expr)))

# เบ‚เบฐเบซเบเบฒเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ (dispatch_reader_macro ... ) เบšเปˆเบญเบ™เบ—เบตเปˆเบชเบฑเบ™เบเบฒเบฅเบฑเบเปเบฅเบฐเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปเบกเปˆเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ
เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

=> #^()
;=> (dispatch_reader_macro ^ ())
=> #^ "เบชเบฐเบšเบฒเบเบ”เบต"
"เบชเบฐเบšเบฒเบเบ”เบต"

เบ„เปเบฒเป€เบ•เบทเบญเบ™:
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เปƒเบ™ lexer เปเบฅเบฐ parser เบ‚เบญเบ‡ Hy, macro เบœเบนเป‰เบญเปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ„เบทเบ™เปƒเบซเบกเปˆเป„เบ”เป‰.
syntax เป€เบŠเบฑเปˆเบ™ ()[]{}. เบญเบฑเบ™เบ™เบตเป‰เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.

เบžเบฒเบเปƒเบ™ Hy เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™
เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:
bits เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเปˆเบงเบ™โ€‹เปƒเบซเบเปˆโ€‹เปเบกเปˆเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เบปเบ™โ€‹เบ—เบตเปˆ hack เบชเบธเบ” Hy เบ•เบปเบงโ€‹เบ‚เบญเบ‡โ€‹เบกเบฑเบ™โ€‹เป€เบญเบ‡, เปเบ•เปˆโ€‹เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบš
เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™ delving deeper เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบกเบฐเบซเบฒเบžเบฒเบ.

Hy เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡
เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต to Hy เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡
เบฎเบนเบšเปเบšเบš Hy เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เบšเบฒเบ‡เป†เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ Python เบ›เบปเบเบเบฐเบ•เบด, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡ Hy
เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เป€เบ›เบฑเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹. เบ•เบปเบงเปเบšเบšเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบ•เปเบฒเปเบซเบ™เปˆเบ‡เปเบซเบผเปˆเบ‡, เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡
เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบ—เบตเปˆเบชเบฐเบญเบฒเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ Hy, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ™เบกเบฐเบซเบฒเบžเบฒเบ. เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเป„เบ”เป‰
เป€เบ›เบปเป‰เบฒเปเบฒเบ, เบฎเบนเบšเปเบšเบš Hy เปเบกเปˆเบ™ mixins เบ‚เบญเบ‡เบŠเบฑเป‰เบ™ Python เบžเบทเป‰เบ™เบ–เบฒเบ™ เปเบฅเบฐ HyObject.

HyObject
hy.models.HyObject เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เปเบšเบš Hy. เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบดเบ—เบตเบเบฒเบ™เบซเบ™เบถเปˆเบ‡, เบ—เบปเบ”เปเบ—เบ™,
เป€เบŠเบดเปˆเบ‡เปเบ—เบ™เบ—เบตเปˆเบ•เปเบฒเปเปœเปˆเบ‡เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ”เป‰เบงเบเบญเบฑเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เป€เบ›เบฑเบ™ argument.
เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฒเบกเบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เป‚เบ”เบ
macro, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบขเบนเปˆเปƒเบ™ compiler เบซเบผเบทเปƒเบ™ macro hy เบšเปเบฅเบดเบชเบธเบ”.

HyObject เบšเปเปˆเป„เบ”เป‰เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบ•เบปเบงเปเบšเบš Hy, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™ mixin
เบชเปเบฒเบฅเบฑเบšเบซเป‰เบญเบ‡เบฎเบฝเบ™เบญเบทเปˆเบ™เป†.

เบชเบปเบกเบ—เบปเบš เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡
เบฅเบฒเบเบŠเบทเปˆเบงเบปเบ‡เป€เบฅเบฑเบš เปเบฅเบฐเบงเบปเบ‡เป€เบฅเบฑเบšเบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเปเบšเบšเบ›เบฐเบชเบปเบกเป‚เบ”เบ Hy parser.

HyList
hy.models.list.HyList เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เปเบšเบš Hyterable "เบกเบฑเบ™". เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญ
เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบงเบปเบ‡เป€เบฅเบฑเบš [] lists, เป€เบŠเบดเปˆเบ‡, เป€เบกเบทเปˆเบญเปƒเบŠเป‰เป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”, เปเบ›เป€เบ›เบฑเบ™
Python เบฅเบฒเบเบŠเบทเปˆเบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เบเบฒเบ™เป€เบžเบตเปˆเบก HyList เปƒเบซเป‰เบเบฑเบšเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเป€เบฎเบฑเบ”เป„เบ”เป‰เบŠเปเป‰เบฒเบเบฑเบ™เบญเบตเบเบˆเบฐเปƒเบŠเป‰ class เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบ”เป‰เบฒเบ™เบŠเป‰เบฒเบเบกเบทเบ„เบทเบ™เปƒเปเปˆ,
เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ concatenate Hy objects เปƒเบ™ macro, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡.

HyExpression
hy.models.expression.HyExpression เบกเบนเบ™เบกเปเบฅเบฐเบ”เบปเบ HyList เบชเปเบฒเบฅเบฑเบšเบงเบปเบ‡เป€เบฅเบฑเบš () เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ. เป„เบ”เป‰
เบœเบปเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เบญเบ‡เบชเบณเบ™เบงเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™: the
compiler เบชเบปเปˆเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบฅเบฐเบซเบงเปˆเบฒเบ‡ compiler เปเบšเบšเบŸเบญเบกเบžเบดเป€เบชเบ”, macros เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰, เปเบฅเบฐ
เบเบฒเบ™เป‚เบ—เบŸเบฑเบ‡เบŠเบฑเบ™ Python เบ›เบปเบเบเบฐเบ•เบด.

HyDict
hy.models.dict.HyDict เบกเบนเบ™เบกเปเบฅเบฐเบ”เบปเบ HyList เบชเปเบฒเบฅเบฑเบš curly-blocked {} เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ, เป€เบŠเบดเปˆเบ‡เบฅเบงเบšเบฅเบงเบก
เบฅเบปเบ‡เป„เบ›เบซเบฒเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก Python เบ—เบตเปˆเบฎเบนเป‰เบซเบ™เบฑเบ‡เบชเบท.

เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ dict เป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบš HyDict เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™
เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบ‚เบญเบ‡ dicts เปƒเบ™เบกเบฐเบซเบฒเบžเบฒเบ, เบกเบตเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบชเปเบฒเบ™เบงเบ™เบ›เบฐเบชเบปเบก
เป€เบ›เบฑเบ™ dict keys (เป€เบ›เบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, the HyExpression เบซเป‰เบญเบ‡เบฎเบฝเบ™ Python เปเบกเปˆเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ” hashable).

เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡
เปƒเบ™เบเบฐเปเบชเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบชเบญเบ‡เป€เบ—เบทเปˆเบญ, เป‚เบ”เบเป€เบ„เบปเบฒเบฅเบปเบšเปเบฒเบเป€เบซเบ” Python เบชเบณเบฅเบฑเบšเบชเบฐเบ•เบฃเบดเบ‡,
เบ–เบทเบเปเบเบเบงเบดเป€เบ„เบฒเบฐเป€เบ›เบฑเบ™เป‚เบ—เป€เบ„เบฑเบ™เบ”เบฝเบง, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเป‚เบ”เบเบเบปเบ‡เป€เบ›เบฑเบ™ a HyString.

เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบšเปเปˆเบ•เบดเบ”เบ‚เบฑเบ”, เบšเปเปˆเบฅเบงเบกเป€เบญเบปเบฒเบเบฐเบซเบงเปˆเบฒเบ‡, เบงเบปเบ‡เป€เบฅเบฑเบš, เบงเบปเบ‡เบขเบทเบก, เบงเบปเบ‡เบขเบทเบกเบ„เบนเปˆ
เปเบฅเบฐเบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™, เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเบฅเบฐเบšเบธ.

เบ•เบปเบงเบฅเบฐเบšเบธเบ–เบทเบเปเบเป‰เป„เบ‚เป€เบ›เบฑเบ™เปเบšเบšเบˆเบณเบฅเบญเบ‡เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป„เบฅเบเบฐเบเบฒเบ™เปเบเบเบงเบดเป€เบ„เบฒเบฐเบ•เบฒเบกเบฅเบณเบ”เบฑเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

ยท HyInteger

ยท HyFloat

ยท HyComplex (เบ–เป‰เบฒเบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเบšเปเปˆเปเบกเปˆเบ™เป€เบ›เบปเปˆเบฒ j)

ยท HyKeyword (เบ–เป‰เบฒเบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ :)

ยท เบชเบฑเบ™เบเบฒเบฅเบฑเบ

HyString
hy.models.string.HyString เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เปเบšเบšเบชเบฐเบ•เบฃเบดเบ‡เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ Hy. เบกเบฑเบ™เบเบฑเบ‡
เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบงเปœเบฑเบ‡เบชเบทเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ, "", เป€เบŠเบดเปˆเบ‡เบฅเบงเบšเบฅเบงเบกเบฅเบปเบ‡เป€เบ›เบฑเบ™ unicode string
เบ•เบปเบงเปœเบฑเบ‡เบชเบทเปƒเบ™ Python. HyStrings เบชเบทเบšเบ—เบญเบ”เบงเบฑเบ”เบ–เบธ unicode เปƒเบ™ Python 2, เปเบฅเบฐ string objects เปƒเบ™
Python 3 (เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”).

HyString เบฎเบนเบšเปเบšเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰.

เบชเบฐเบ•เบฃเบดเบ‡เบ•เบปเบงเปœเบฑเบ‡เบชเบท Hy เบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰เบซเบผเบฒเบเบชเบฒเบ, เปเบฅเบฐเบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ”เบเบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเป€เบ›เบฑเบ™เบชเบฒเบเบ”เบฝเบง
เบซเบ™เปˆเบงเบเบšเปเบฅเบดเบเบฒเบ™, เป€เบ„เบปเบฒเบฅเบปเบš Python escapes เบชเปเบฒเบฅเบฑเบš unicode strings.

Numeric เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡
hy.models.integer.HyInteger เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบงเปœเบฑเบ‡เบชเบทเบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก (เป‚เบ”เบเปƒเบŠเป‰ เบเบฒเบง เบžเบดเบกเบขเบนเปˆเปƒเบ™ Python 2,
เปเบฅเบฐ int เปƒเบ™ Python 3).

hy.models.float.HyFloat เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบงเปœเบฑเบ‡เบชเบทเบˆเบธเบ”เบฅเบญเบ.

hy.models.complex.HyComplex เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™.

เป‚เบกเป€เบ”เบงเบ•เบปเบงเป€เบฅเบเบ–เบทเบเปเบเบเบงเบดเป€เบ„เบฒเบฐเป‚เบ”เบเปƒเบŠเป‰ Python routine เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™, เปเบฅเบฐ python เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡
เบ•เบปเบงเปœเบฑเบ‡เบชเบทเบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ Hy เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.

เบชเบฑเบ™เบเบฒเบฅเบฑเบ
hy.models.symbol.HySymbol เปเบกเปˆเบ™เบ•เบปเบงเปเบšเบšเบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบเปƒเบ™เบžเบฒเบชเบฒ Hy. เบกเบฑเบ™
เบกเบนเบ™เบกเปเบฅเบฐเบ”เบปเบ HyString.

เบชเบฑเบ™เบเบฒเบฅเบฑเบ เบงเบฑเบ”เบ–เบธเบ–เบทเบเบ›เบปเบ™เป€เบ›เบทเป‰เบญเบ™เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เปเบเบเบงเบดเป€เบ„เบฒเบฐ, เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเปƒเบซเป‰เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบ™เบ‚เบญเบ‡ Python:

ยทเบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบตเปˆเบญเป‰เบญเบกเบฎเบญเบšเบ”เป‰เบงเบเบ”เบฒเบง (*) เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ;

ยท เบ‚เบตเบ”เบ•เปเปˆ (-) เบ–เบทเบโ€‹เบ›เปˆเบฝเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ‚เบตเบ”โ€‹เบเป‰เบญเบ‡ (_);

ยท เบซเบ™เบถเปˆเบ‡โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบซเบกเบฒเบโ€‹เบ„เปเบฒโ€‹เบ–เบฒเบกโ€‹เบ•เปเปˆโ€‹เบซเบ™เป‰เบฒ (?) เป„เบ”เป‰โ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹ เปเบกเปˆเบ™_.

Caveat: เป€เบ›เบฑเบ™ mangling เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™เป„เบฅเบเบฐ parsing, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰
เป‚เบ›เบฃเปเบเบกเบชเป‰เบฒเบ‡ HySymbols เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ Hy. เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™
เบเบปเบ™เป„เบเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบ gensym เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบ "uninterned".

HyKeyword
hy.models.keyword.HyKeyword เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™เปƒเบ™ Hy. เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ
a :. เบซเป‰เบญเบ‡เบฎเบฝเบ™เบชเบทเบšเบ—เบญเบ” HyString.

เป€เบžเบทเปˆเบญ เบˆเบณ เปเบ™เบ HyKeywords เบˆเบฒเบ เบชเบฑเบ™เบเบฒเบฅเบฑเบ, เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ‚เบญเบ‡ (เบšเปเปˆโ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เปƒเบˆโ€‹)
เบเบฒเบ™เบ›เบฐเบ—เบฐเบเบฑเบ™, เบฅเบฑเบเบชเบฐเบ™เบฐเบชเปˆเบงเบ™เบ•เบปเบงเบ—เบตเปˆเปƒเบŠเป‰ unicode "\uFDD0" เปเบกเปˆเบ™ prepended เบเบฑเบšเบ„เปเบฒเบ—เบตเปˆเบฎเบนเป‰เบซเบ™เบฑเบ‡เบชเบท
เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒ.

cons เบˆเบธเบฅเบฑเบ‡
hy.models.cons.HyCons เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡ Python-friendly cons เบˆเบธเบฅเบฑเบ‡. เบˆเบธเบฅเบฑเบ‡ cons เปเบกเปˆเบ™
เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบ•เบฒเบกเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบ•เบปเบงเปเบ› LISP "เบ›เบปเบเบเบฐเบ•เบด" เป€เบŠเบฑเปˆเบ™ Scheme เบซเบผเบท Common
เบฅเบตเบช.

เป€เบŠเบฅ cons เปเบกเปˆเบ™เบงเบฑเบ”เบ–เบธ 2 เบฅเบฒเบเบเบฒเบ™, เบ›เบฐเบเบญเบšเบกเบต a เบฅเบปเบ” (เบซเบปเบง) เปเบฅเบฐ เบ cdr (เบซเบฒเบ‡). เปƒเบ™เบšเบฒเบ‡ Lisp
variants, เบˆเบธเบฅเบฑเบ‡ cons เปเบกเปˆเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™, เปเบฅเบฐ S-expressions เปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง
เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เป€เบ›เบฑเบ™เบฅเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เบˆเบธเบฅเบฑเบ‡ cons. เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ™ Hy, เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปเบกเปˆเบ™เป€เบฎเบฑเบ”เบˆเบฒเบเบฅเบฒเบเบŠเบทเปˆ Python เบซเปเปˆเบ”เป‰เบงเบ a HyExpressionเบ—เบตเปˆเบขเบนเปˆ เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เป„เบ”เป‰ HyCons
mimics เบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ› Lisp "เบ›เบปเบเบเบฐเบ•เบด" เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™:

ยท (เบ‚เปเป‰เป€เบชเบ เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ nil) is (HyExpression [เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡])

ยท (เบ‚เปเป‰เป€เบชเบ เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ เบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™) is ((เบ›เบฐเป€เบžเบ” เบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™) (+ [เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡] เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบšเบฒเบ‡)) (if
เบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™ เบชเบทเบšเบ—เบญเบ”เบกเบฒเบˆเบฒเบ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ).

ยท (เป„เบ”เป‰เบฎเบฑเบš (เบ‚เปเป‰เป€เบชเบ a b) 0) is a

ยท (เบŠเบญเบ (เบ‚เปเป‰เป€เบชเบ a b) 1) is b

Hy เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ syntax เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ dotted, เบšเปˆเบญเบ™เบ—เบตเปˆ '(เบ . b) เบงเบดเบ—เบตเบเบฒเบ™ (เบ‚เปเป‰เป€เบชเบ 'a 'เบ‚) เปเบฅเบฐ '(เบ b . c) เบงเบดเบ—เบตเบเบฒเบ™
(เบ‚เปเป‰เป€เบชเบ 'a (เบ‚เปเป‰เป€เบชเบ 'b 'เบ„)). เบ–เป‰เบฒ compiler เบžเบปเบš cell cons เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”, เบกเบฑเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™
เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”.

HyCons wraps เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™ (เบฅเบปเบ”โ€‹เปเบฅเบฐ cdrโ€‹) เปƒเบ™โ€‹เบ›เบฐโ€‹เป€เบžเบ” Hyโ€‹, เป€เบžเบทเปˆเบญโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เบเบฒเบ™โ€‹เบซเบกเบนเบ™โ€‹เปƒเบŠเป‰โ€‹เบ‚เบญเบ‡โ€‹
เป€เบŠเบฅ cons เปƒเบ™เบšเปเบฅเบดเบšเบปเบ”เบกเบฐเบซเบฒเบžเบฒเบ.

Hy เบžเบฒเบเปƒเบ™ เบ—เบดเบ”เบชเบฐเบ”เบต
เบžเบฒเบšเบฅเบงเบก
เบžเบฒเบเปƒเบ™ Hy เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเบ•เปเปˆเบซเบ™เป‰เบฒเบ‚เบญเบ‡ Python bytecode, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Hy เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡
เบฅเบงเบšเบฅเบงเบกเบฅเบปเบ‡เป€เบ›เบฑเบ™ Python Bytecode, เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ runtime Python เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เป€เบžเบทเปˆเบญเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ” Hy,
เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบกเบฑเบ™.

เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบ™เบตเป‰เปเบกเปˆเบ™เป‚เบ”เบเบเบฒเบ™เปเบ› Hy เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™ Python AST, เปเบฅเบฐ
เบเบฒเบ™เบชเป‰เบฒเบ‡ AST เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Python bytecode เป‚เบ”เบเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบˆเบฒเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ Python
เบซเปเบชเบฐเบซเบกเบธเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเป‰เปเบฒเบเบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Python เบžเบฒเบเปƒเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†
เบเบฒเบ™เบ›เปˆเบญเบ Python เบ”เบฝเบง.

Hy เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบตเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบžเบฒเบเบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเบเบงเบกเป€เบญเบปเบฒเปเบ•เปˆเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡ Hy เบˆเบฒเบเปเบซเบผเปˆเบ‡เป„เบ›เบซเบฒ
เป€เบงเบฅเบฒเปเบฅเปˆเบ™.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™ 1 เปเบฅเบฐ 2: Tokenizing เปเบฅเบฐ เบเบณ เบฅเบฑเบ‡เบ—เบฑเบšเป€เบฎเบทเบญ
เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก Hy เปเบกเปˆเบ™เป€เบžเบทเปˆเบญ lex เปเบซเบผเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ tokens เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš. เบžเบงเบเป€เบฎเบปเบฒ
เปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ rply, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบ‡เบฒเบก (เปเบฅเบฐเป„เบง), เบ‚เบฝเบ™เป€เบ›เบฑเบ™เบŠเบธเบ”เบเปˆเบญเบ
เบ‚เบญเบ‡ Python เป€เบญเบตเป‰เบ™เบงเปˆเบฒ rpython.

เบฅเบฐเบซเบฑเบ” lexing เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ hy.lex.lexer. เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบชเปˆเบงเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ” Hy
เป„เบงเบเบฐเบเบญเบ™, เปเบฅเบฐเบ—เบธเบเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบ rply - เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ”
"callbacks" เบชเปเบฒเบฅเบฑเบš rply เปƒเบ™ hy.lex.parser, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒ tokens เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™
เปเบšเบš Hy.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบดเบ”เบงเปˆเบฒเบ•เบปเบงเปเบšเบš Hy เป€เบ›เบฑเบ™ "AST" เบชเปเบฒเบฅเบฑเบš Hy, เบกเบฑเบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ Macros เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™
(เป‚เบ”เบเบเบปเบ‡), เปเบฅเบฐเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ compiler เปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบฅเบงเบšเบฅเบงเบก Hy เบฅเบปเบ‡.

เป€เบšเบดเปˆเบ‡ เบเบฑเบ‡:
เบชเปˆเบงเบ™ Hy เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡ เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš Hy model เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ.

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™ 3: Hy เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก to Python AST
เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ magic เบชเปˆเบงเบ™เปƒเบซเบเปˆเปƒเบ™ Hy เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒ Hy AST (เบ•เบปเบงเปเบšเบš),
เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Python AST. เบชเบญเบ‡เบชเบฒเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบตเป‰เบ„เป‰เบฒเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบขเบนเปˆเบšเปˆเบญเบ™เบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบœเปˆเบฒเบ™เบกเบฒเบชเบญเบ‡เบชเบฒเบกเบขเปˆเบฒเบ‡
เบšเบฑเบ™เบซเบฒเปƒเบ™ AST, เปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™ compiler เปเบกเปˆเบ™เบšเบฒเบ‡เบงเบฝเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”
เบกเบต.

compiler เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ, เบชเบฐเบ™เบฑเป‰เบ™เบขเปˆเบฒเบฎเบนเป‰เบชเบถเบเบšเปเปˆเบ”เบตเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบชเบฑเบเบขเบฒเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”,
เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ–เบทเบเบ•เป‰เบญเบ‡.

เบˆเบธเบ”เป€เบ‚เบปเป‰เบฒเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡ Compiler เปเบกเปˆเบ™ HyASTCompiler.compile. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™ invoked, เปเบฅเบฐ
เบงเบดเบ—เบตเบเบฒเบ™ "เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ" เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™ (เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบฑเบ™เบเบฒเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡
API เบ™เบญเบโ€‹เบˆเบฒเบโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹)โ€‹.

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบฒเบเปƒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบ•เบดเป€เบชเบ”เป‚เบ”เบเบเบปเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป€เบเบทเบญเบšเบชเบฐเป€เบซเบกเบตเบšเบฑเบ‡เบ„เบฑเบš
เบ•เบปเป‰เบ™เป„เบกเป‰ Hy เบœเปˆเบฒเบ™ เบฅเบงเบšเบฅเบงเบก, เปเบฅเบฐเบกเบฑเบเบˆเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบเปˆเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™
เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบต. เบกเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบœเบนเป‰เบชเบปเปˆเบ‡เบ•เปเปˆเบ›เบฐเป€เบžเบ”เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบเปˆเบญเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡.

เบงเบดเบ—เบตเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆ preform เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบกเปˆเบ™เบซเบกเบฒเบเบ”เป‰เบงเบ @builds() เบญเบญเบเปเบšเบš. เป€เบˆเบปเป‰เบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”
เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบœเปˆเบฒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ‚เบญเบ‡เบฎเบนเบšเปเบšเบš Hy เบ—เบตเปˆเบกเบฑเบ™เบฅเบงเบšเบฅเบงเบก, เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ string เบชเปเบฒเบฅเบฑเบš
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ. เบ‚เป‰เบญเบเบˆเบฐเบฅเบถเบšเบกเบฑเบ™เบญเบญเบเปƒเบ™เบงเบดเบ™เบฒเบ—เบต.

เบซเบ™เป‰เบฒโ€‹เบ—เปเบฒโ€‹เบญเบดเบ” เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™ เบ›เบฐเป€เบžเบ”เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡
เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ เบฅเบงเบšเบฅเบงเบก เบงเบดเบ—เบตเบเบฒเบ™. เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบกเปˆเบ™เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ™เบฑเป‰เบ™
เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบเปเปˆเบชเป‰เบฒเบ‡. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบตโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเป‰เบฒเบ‡โ€‹เป„เบ”เป‰โ€‹ เบ›เบฐเป€เบžเบ”() เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒ
เบกเบต, เปเบฅเบฐเบชเบปเปˆเบ‡เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบกเบฑเบ™เป„เบ”เป‰. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เปƒเบ”เป†เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ›เบฐเป€เบžเบ”เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบเบปเบเบชเบนเบ‡เบšเบปเบ”เบšเบฒเบ”เบžเบฒเบเปƒเบ™ เบ‚เปเป‰โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™.

เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบต a HyString, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเปเบœเบ™เบ—เบตเปˆเป€เบเบทเบญเบš 1 เบ•เปเปˆ 1 เบ‚เบญเบ‡ Hy AST เบเบฑเบš Python
AST. เป„เบ”เป‰ compile_string เบงเบดเบ—เบตเบเบฒเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒ HyString, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบ›เบฑเบ™ ast.Str() เบ™เบฑเป‰เบ™เปเบกเปˆเบ™
เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบ เปเบฅเบฐ เป€เบ™เบทเป‰เบญเปƒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เบ‚เบฐเบซเบเบฒเบเบกเบฐเบซเบฒเบžเบฒเบ
เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš a HyExpression, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ Macro เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบ, เปเบฅเบฐเบŠเบธเบเบเบนเป‰เปƒเบซเป‰เบกเบต
เบกเบฑเบ™เบ‚เบฐเบซเบเบฒเบเบญเบญเบเป‚เบ”เบเบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡ hy.macros.macroexpand, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบนเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™
HyASTCompiler.compile.

เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡ เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™ เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ-เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡
เบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”เบžเบฝเบ‡เปเบ•เปˆเปเบกเปˆเบ™ HyExpression, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ AST เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบš
เปƒเบ™เปเบšเบšเบŸเบญเบกเบžเบดเป€เบชเบ”เปƒเบ™เบ„เปเบฒเบ–เบฒเบก. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เบต (if เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เบœเบดเบ”), เบžเบงเบเป€เบฎเบปเบฒ
เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡โ€‹เป€เบ›เบฑเบ™โ€‹ ast.เบ–เป‰เบฒ, เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบเปˆเบญเบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ @builds()
เบกเบต String เป€เบ›เบฑเบ™ argument เป€เบ‚เบปเป‰เบฒเบกเบฒ.

เบชเปเบฒโ€‹เบฅเบฑเบš compile_expression (เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบ”เป‰เบงเบ @builds(HyExpression)) เบˆเบฐโ€‹เบˆเบฑเบ”โ€‹เบชเบปเปˆเบ‡โ€‹
เบญเบตเบ‡เปƒเบชเปˆเบชเบฐเบ•เบฃเบดเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ, เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เบšเปเปˆเปเบกเปˆเบ™
เบŠเปˆเบญเบเปเบ™เปˆ, เบกเบฑเบ™เบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบฑเป‰เบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡ (เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป‚เบ”เบเบเบฒเบ™เบฅเป‰เบฝเบ‡ เบ‚เปเป‰โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™).

เบ–เป‰เบฒ String เบšเปเปˆเบฎเบนเป‰เบˆเบฑเบ Hy, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡ ast.เป‚เบ—, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบžเบฐเบเบฒเบเบฒเบก
เป‚เบ—เบซเบฒ runtime (เปƒเบ™ Python, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: foo()).

เบšเบฑเบ™เบซเบฒ เบกเบปเบ™เบ•เบต เบเบฑเบš Python AST
Python AST เปเบกเปˆเบ™เบเบดเปˆเบ‡เปƒเบซเบเปˆ; เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”
Python เป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เปเปˆเบชเบนเป‰เบเบฑเบš Python เบเบฒเบเป€เบเบตเบ™เป„เบ›. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเปˆเบงเบ™เปเบšเปˆเบ‡เบเบธเบ”เบ•เบดเบ—เปเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ
เบšเบฑเบ™เบซเบฒ, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบฑเป‰เบ™เบ‚เบญเบ‡เป€เบฅเบทเปˆเบญเบ‡เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบžเบปเบš.

Python เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡ เบฅเบฐเบซเบงเปˆเบฒเบ‡ เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ เปเบฅเบฐ เบชเบณ เบ™เบงเบ™.

เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปƒเบซเบเปˆ - เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Python เบชเปˆเบงเบ™เปƒเบซเบเปˆ, เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™
เบเบฒเบเป€เบ›เบฑเบ™เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ "เบ”เบต, เปเบกเปˆเบ™เปเบฅเป‰เบง".

เปƒเบ™ Python, เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:

เบžเบดเบก เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ x in เบฅเบฐเบ”เบฑเบš(10): เบœเปˆเบฒเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒ เบžเบดเบก เบžเบดเบกเบชเปเบฒเบ™เบงเบ™, เปเบฅเบฐ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบšเปเปˆเปเบกเปˆเบ™
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เป„เบซเบผเบ„เบงเบšเบ„เบธเบก. เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ 1 + 1 เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบš lambda
x: 1 + x, เปเบ•เปˆเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบฒเบชเบฒเบญเบทเปˆเบ™เป†, เป€เบŠเบฑเปˆเบ™: if, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™, เบซเบผเบท เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ เปเบกเปˆเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบกเบต "เบ„เบธเบ™เบ„เปˆเบฒ" เบชเปเบฒเบฅเบฑเบš Python, เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ Hy เบเบฒเบ, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡
เบ„เบท (เบžเบดเบก (if เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เบœเบดเบ”)) เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เปเบฒเบกเบฐเบ”เบฒ, เบกเบฑเบ™เบ„เบฒเบ”เบงเปˆเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบเบฒเบ™เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ a เบœเบปเบ™ เบงเบฑเบ”เบ–เบธ, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เป€เบ–เบดเบ‡เปƒเบ”เป† ast.stmt
เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™, เปเบฅเบฐเบ”เบฝเบง ast.expr เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ„เบธเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบชเบดเปˆเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก
เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. Hy เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเบกเบญเบšเบซเบกเบฒเบเปƒเบซเป‰เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบฅเปˆเบ™.

เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, Hy:

(เบžเบดเบก (เบ–เป‰เบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบˆเบดเบ‡โ€‹เบšเปเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹)โ€‹)

เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹:

เบ–เป‰เบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡:
_mangled_name_here = เบ–เบทเบ
เบญเบทเปˆเบ™:
_mangled_name_here = เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เบžเบดเบก _mangled_name_here

เบ•เบปเบเบฅเบปเบ‡, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบปเบงเบฐเป€เบฅเบฑเบเบ™เป‰เบญเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เบ„เบณเบ–เบฐเปเบซเบผเบ‡เบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™:

เบžเบดเบก True เบ–เป‰เบฒเป€เบ›เบฑเบ™เบˆเบดเบ‡เบญเบตเบเบœเบดเบ”

เป‚เบ”เบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ ast.expr เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เปเบ•เปˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบ–เบท.

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™ 4: Python เบฅเบฐเบซเบฑเบ”เป„เบšเบ• เบœเบปเบ™เบœเบฐเบฅเบดเบ” เปเบฅเบฐ เป€เบงเบฅเบฒเปเบฅเปˆเบ™
เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ•เบปเป‰เบ™เป„เบกเป‰ Python AST เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบกเบฅเบงเบšเบฅเบงเบกเบกเบฑเบ™เบเบฑเบš Python
bytecode เป‚เบ”เบเบเบฒเบ™เบเบนเป‰เบกเบฑเบ™เบœเปˆเบฒเบ™ เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™. เบˆเบฒเบโ€‹เบ™เบตเป‰โ€‹เบชเบธเบ”โ€‹เบญเบญเบโ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบญเบตเบโ€‹เปเบฅเป‰เบงโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹, เปเบฅเบฐโ€‹
Python เบเปเบฒเบฅเบฑเบ‡เป€เบšเบดเปˆเบ‡เปเบเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™ Python tracebacks, pdb เปเบฅเบฐ
เปเบญเบฑเบšเบฏ django เป€เบฎเบฑเบ”เบงเบฝเบ.

Hy เบกเบฒเป‚เบ„เบฃ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ gensym เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบ›เบญเบ”เป„เบž เบกเบฒเป‚เบ„เบฃ
เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เบฝเบ™ macro, เบซเบ™เบถเปˆเบ‡เบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบˆเบฑเบšเบ•เบปเบงเปเบ›เบžเบฒเบเบ™เบญเบเบซเบผเบทเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰
เบŠเบทเปˆเบ•เบปเบงเปเบ›เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบ‚เบฑเบ”เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบœเบนเป‰เปƒเบŠเป‰.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ macro เบ•เบปเบงเบขเปˆเบฒเบ‡ nif (เป€เบšเบดเปˆเบ‡
http://letoverlambda.com/index.cl/guest/chap3.html#sec_5 เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบปเบกโ€‹เบšเบนเบ™โ€‹เบซเบผเบฒเบโ€‹.)
nif เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: เบ•เบปเบงเป€เบฅเบ if, เบšเปˆเบญเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ, เบซเบ™เบถเปˆเบ‡เปƒเบ™
3 เบฎเบนเบšเปเบšเบšเปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบšเบงเบ, เบชเบนเบ™เบซเบผเบทเบฅเบปเบš.

เบเบฒเบ™เบœเปˆเบฒเบ™เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เป€เบŠเบฑเปˆเบ™:

(defmacro nif [expr pos-form zero-form neg-form]
`(เปƒเบซเป‰ [[obscure-name ~expr]]
(cond [(pos? obscure-name) ~pos-form]
[(เบชเบนเบ™? obscure-name) ~ zero-form]
[(neg? obscure-name) ~neg-form])))

เบšเปˆเบญเบ™เบ—เบตเปˆ obsure เบŠเบทเปˆ เปเบกเปˆเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเบšเบฒเบ‡เบŠเบทเปˆเบ•เบปเบงเปเบ›เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบ‚เบฑเบ”เบเบฑเบšเบญเบฑเบ™เบญเบทเปˆเบ™
เบฅเบฐเบซเบฑเบ”. เปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆเบ”เบต, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™.

เบงเบดเบ—เบตเบเบฒเบ™ gensym เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบฅเบฑเบเปƒเบซเบกเปˆ, เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบชเปเบฒเบฅเบฑเบšเป‚เบญเบเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.
เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเบซเบผเบฒเบเบ‚เบญเบ‡ nif เบˆเบฐเป€เบ›เบฑเบ™:

(defmacro nif [expr pos-form zero-form neg-form]
(เปƒเบซเป‰ [[g (gensym)]]
`(เปƒเบซเป‰ [[~g ~expr]]
(cond [(pos? ~g) ~pos-form]
[(เบชเบนเบ™? ~g) ~ zero-form]
[(neg? ~g) ~neg-form]))))

เบ™เบตเป‰เปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ‡เปˆเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบฑเบ™เบเบฒเบฅเบฑเบเบ”เบฝเบง. เปเบ•เปˆเบ–เป‰เบฒเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบ
gensym เบ‚เบญเบ‡เบกเบตเบกเบฐเบซเบฒเบžเบฒเบเบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบกเบต gensyms เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเป„เบ›เบชเบนเปˆเบŠเบธเบ”เบ‚เบญเบ‡ เปƒเบซเป‰
เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™:

(with-gensyms [abc]
... )

เบ‚เบฐเบซเบเบฒเบเป„เบ›:

(เปƒเบซเป‰ [[a (gensym)
[b (gensym)
[c (gensym)]]
... )

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ nif เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

(defmacro nif [expr pos-form zero-form neg-form]
(เบเบฑเบš gensyms [g]
`(เปƒเบซเป‰ [[~g ~expr]]
(cond [(pos? ~g) ~pos-form]
[(เบชเบนเบ™? ~g) ~ zero-form]
[(neg? ~g) ~neg-form]))))

เบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบกเบฐเบซเบฒเบžเบฒเบเปƒเบซเบกเปˆเบ—เบตเปˆเป€เบฎเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ. defmacro/g! เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒ
เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ g! เปเบฅเบฐเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ—เบซเบฒ gensym เบเบฑเบšเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡
เบชเบฑเบ™เบเบฒเบฅเบฑเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ g!a เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™ (gensym "เบ").

เบชเบฐเบšเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ‚เบญเบ‡ nif, เบชเป‰เบฒเบ‡เบ”เป‰เบงเบ defmacro/g! เบเบฒเบเป€เบ›เบฑเบ™:

(defmacro/g! nif [expr pos-form zero-form neg-form]
`(เปƒเบซเป‰ [[~g!res ~expr]]
(cond [(pos? ~g!res) ~pos-form]
[(เบชเบนเบ™? ~g!res) ~เบชเบนเบ™เปเบšเบšเบŸเบญเบก]
[(neg? ~g!res) ~neg-form]))))

เบเบฒเบ™เบเบงเบ”เบชเบญเบš Macro Arguments เปเบฅเบฐ เบเบฒเบ™เบฅเป‰เบฝเบ‡ เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™
Hy เบœเบนเป‰เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™ Built-Ins

เบœเบนเป‰เบ„เบงเบšเบ„เบธเบก MODULES INDEX


เป€เบ™เบทเป‰เบญเปƒเบ™:

เบญเบฐเป€เบ™เบเบ›เบฐเบชเบปเบ‡ เบกเบฒเป‚เบ„เบฃ
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.9.12.

เป‚เบกเบ”เบนเบ™ macro anaphoric เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เปƒเบ™ Hy เบซเบผเบฒเบ concise เปเบฅเบฐเบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐ
เบญเปˆเบฒเบ™
macro anaphoric เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ macro เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเป€เบˆเบ”เบ•เบฐเบ™เบฒเป€เบเบฑเบšเบเปเบฒเบšเบฒเบ‡เบฎเบนเบšเปเบšเบš
เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เปเบเปˆเบกเบฐเบซเบฒเบžเบฒเบเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบ–เบทเบเบเปˆเบฒเบงเป€เบ–เบดเบ‡เป‚เบ”เบ anaphor (เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป‚เบ”เบเบญเป‰เบฒเบ‡เบญเบตเบ‡
เบเบฑเบšโ€‹เบ„เบปเบ™โ€‹เบญเบทเปˆเบ™). โ€” เบงเบดโ€‹เบเบดโ€‹เบžเบตโ€‹เป€เบ”เบ (http://en.wikipedia.org/wiki/Anaphoric_macro)

เบกเบฒเป‚เบ„เบฃ
ap-if
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (ap-if (foo) (เบžเบดเบก เบกเบฑเบ™))

เบ›เบฐเป€เบกเบตเบ™เบฎเบนเบšเปเบšเบšเบ—เปเบฒเบญเบดเบ”เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡, เปเบฅเบฐเบœเบนเบเบกเบฑเบ”เบกเบฑเบ™ it เบ—เบฑเบ‡โ€‹เปƒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡โ€‹เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹
เบชเบฒเบ‚เบฒ.

ap-เปเบ•เปˆเบฅเบฐ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เปเบ•เปˆเบฅเบฐเบญเบฑเบ™ [1 2 3 4 5] (เบžเบดเบก เบกเบฑเบ™))

เบ›เบฐเป€เบกเบตเบ™เปเบšเบšเบŸเบญเบกเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเปเบฒเบฅเบฑเบšเบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡.

ap-เปเบ•เปˆเบฅเบฐเบ‚เบฐเบ™เบฐ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (ap-เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ เบ„เบฒเบ” เบฎเปˆเบฒเบ‡เบเบฒเบ)

เบ›เบฐเป€เบกเบตเบ™เปเบšเบšเบŸเบญเบกเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเปเบšเบšเบŸเบญเบก predicate เบเบฑเบšเบ„เบทเบ™เบกเบฒ เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.

=> (ap-each-while [1 2 3 4 5 6] (< เบกเบฑเบ™ 4) (เบžเบดเบกเบกเบฑเบ™))
1
2
3

เปเบœเบ™เบ—เบตเปˆ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (ap-map เบฎเบนเบšเปเบšเบš เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ)

เบฎเบนเบšเปเบšเบš anaphoric เบ‚เบญเบ‡เปเบœเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบเบฑเบ™เบเบฑเบšเปเบœเบ™เบ—เบตเปˆเบ›เบปเบเบเบฐเบ•เบดเป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ
เบงเบฑเบ”เบ–เบธเบกเบฑเบ™เปƒเบŠเป‰เปเบšเบšเบŸเบญเบก Hy. เบŠเบทเปˆเบžเบดเป€เบชเบ” it เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบงเบฑเบ”เบ–เบธเบ›เบฐเบˆเบธเบšเบฑเบ™เบˆเบฒเบ
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปƒเบ™ iteration เป„เบ”เป‰.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (ap-map (* it 2) [1 2 3]))
[2, 4, 6]

ap-map-when
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (ap-map-when predfn เบ•เบปเบงเปเบ—เบ™ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ)

เบ›เบฐเป€เบกเบตเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบฅเบฒเบเบŠเบทเปˆเป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ predicate เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰
เปเบšเบšเบŸเบญเบก.

=> (เบฅเบฒเบเบเบฒเบ™ (ap-map-when odd? (* 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-filter
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (ap-filter เบฎเบนเบšเปเบšเบš เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ)

เป€เบŠเบฑเปˆเบ™โ€‹เบ”เบฝเบงโ€‹เบเบฑเบš เปเบœเบ™เบ—เบตเปˆ เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบฎเบนเบšเปเบšเบšเบžเบดเป€เบชเบ”เปเบ—เบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบžเบทเปˆเบญเบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. เบŠเบทเปˆเบžเบดเป€เบชเบ” it เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบŠเป‰เบณ.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (ap-filter (> (* it 2) 6) [1 2 3 4 5]))
[4, 5]

ap-เบ›เบฐเบ•เบดเป€เบชเบ”
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (ap-เบ›เบฐเบ•เบดเป€เบชเบ” เบฎเบนเบšเปเบšเบš เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ)

เบซเบ™เป‰เบฒเบ—เบตเปˆเบ™เบตเป‰เป€เบฎเบฑเบ”เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบš ap-filter, เบกเบฑเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบœเปˆเบฒเบ™
เบ„เบฒเบ”. เบŠเบทเปˆเบžเบดเป€เบชเบ” it เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบŠเป‰เบณ.

=> (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ (ap-reject (> (* it 2) 6) [1 2 3 4 5]))
[1, 2, 3]

ap-dotimes
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ (ap-dotimes n เบฎเปˆเบฒเบ‡เบเบฒเบ)

เบซเบ™เป‰เบฒเบ—เบตเปˆเบ™เบตเป‰เบ›เบฐเป€เบกเบตเบ™เบฎเปˆเบฒเบ‡เบเบฒเบ n เป€เบงเบฅเบฒ, เบเบฑเบšเบ•เบปเบงเปเบ›เบžเบดเป€เบชเบ” it เบœเบนเบโ€‹เบžเบฑเบ™โ€‹เบˆเบฒเบ 0 to
1-เบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡.

=> (setv n [])
=> (ap-dotimes 3 (. append n เบกเบฑเบ™))
=> เบ™
[0, 1, 2]

ap-first
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ (ap-first predfn เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ)

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบชเบปเปˆเบ‡เบ„เบทเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™ predicate เบซเบผเบท เบšเปเปˆเบกเบต, เบ—เบตเปˆเบกเบต
เบ•เบปเบงเปเบ›เบžเบดเป€เบชเบ” it เบœเบนเบเบกเบฑเบ”เบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบŠเป‰เบณ.

=> (ap-first (> เบกเบฑเบ™ 5) (เบŠเปˆเบงเบ‡ 10))
6

ap-เบชเบธเบ”เบ—เป‰เบฒเบ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ (ap-เบชเบธเบ”เบ—เป‰เบฒเบ predfn เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ)

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบชเบปเปˆเบ‡เบ„เบทเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบœเปˆเบฒเบ™ predicate เบซเบผเบท เบšเปเปˆเบกเบต, เบžเบดเป€เบชเบ”
เบ•เบปเบงเปเบ› it เบœเบนเบเบกเบฑเบ”เบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบŠเป‰เบณ.

=> (ap-last (> เบกเบฑเบ™ 5) (เป„เบฅเบเบฐ 10))
9

ap-เบซเบผเบธเบ”เบœเปˆเบญเบ™
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ (ap-reduce เบฎเบนเบšเปเบšเบš เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ &เบ—เบฒเบ‡เป€เบฅเบทเบญเบ เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เป€เบšเบทเป‰เบญเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹)

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบชเบปเปˆเบ‡เบ„เบทเบ™เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบšเบšเบŸเบญเบกเบเบฑเบš 2 เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เปƒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเปเบฅเบฐ
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบต 3 เปเบฅเบฐเบญเบทเปˆเบ™เป†เบˆเบปเบ™เบเปˆเบงเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบซเบกเบปเบ”. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบ›เบฑเบ™
เบชเบฒเบกเบฒเบ”เบชเบฐเปœเบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป„เบ”เป‰ เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบˆเบฐเบ™เบณเปƒเบŠเป‰เบเบฑเบšเบ„เปˆเบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™ เปเบฅเบฐเบ„เปˆเบฒ
เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เปเบ—เบ™. เบ™เบตเป‰เป€เบ›เบตเบ”เป€เบœเบตเบเปƒเบซเป‰เป€เบซเบฑเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบ–เบทเบ iterated เป€เบ›เบฑเบ™ it เปเบฅเบฐเบ›เบฐเบˆเบธเบšเบฑเบ™
เบกเบนเบ™เบ„เปˆเบฒเบชเบฐเบชเบปเบกเป€เบ›เบฑเบ™ acc.

=> (ap-reduce (+ it acc) (เบŠเปˆเบงเบ‡ 10))
45

loop/recur
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

เป„เบ”เป‰ loop / recur macro เปƒเบซเป‰เบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบกเบตเบงเบดเบ—เบตเบ‡เปˆเบฒเบเป†เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เป‚เบ—เบซเบฒเบ‡ (TCO)
เปƒเบ™เบฅเบฐเบซเบฑเบ” Hy เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.
เบเบฒเบ™เป€เบญเบตเป‰เบ™เบซเบฒเบ‡เปเบกเปˆเบ™เบเบฒเบ™เป‚เบ—เปเบšเบšเบ›เบปเบเบเบฐเบ•เบดเบเปˆเบญเบเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบญเบทเปˆเบ™เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบ
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”; เบกเบฑเบ™โ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เป€เบ›เบฑเบ™โ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เป„เบ›โ€‹เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เบกเบฒโ€‹เบ—เบฑเบ™โ€‹เบ—เบตโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹
เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบเบฒเบ™โ€‹. เบ–เป‰เบฒเบเบฒเบ™เป€เบญเบตเป‰เบ™เบญเบฑเบ™เปƒเบ”เบญเบฑเบ™เปœเบถเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปœเป‰เบฒเบ—เบตเปˆเบเปˆเบญเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบ™เบณเป„เบ›เบชเบนเปˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”
เบเบฑเบš routine เบเปˆเบญเบเบ”เบฝเบงเบเบฑเบ™เบ™เบตเป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบฅเบปเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เป‚เบ—, เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบซเบฒเบ‡,
subroutine เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ–เบทเบเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบฒเบ‡ recursive, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”เบ‚เบญเบ‡ recursion.
เบเบฒเบ™เป‚เบ—เบซเบฒเบ‡เปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบก stack เปƒเบซเบกเปˆ
เบเบญเบšเปƒเบชเปˆ stack เบเบฒเบ™เป‚เบ—. เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบเบญเบšเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™
เบซเบผเบฒเบ, เปเบฅเบฐเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบเบญเบšเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—เบซเบฒเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป‚เบ„เบ‡เบเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ•เบฑเป‰เบ™เป„เบ›เบซเบฒ
เป„เบ›เบซเบฒ routine เบเปˆเบญเบเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบฅเบฐเบซเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบฅเปเบฒเบ”เบฑเบšเบเบฒเบ™เป‚เบ—เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปเบกเปˆเบ™
เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบฅเบปเบšเบฅเป‰เบฒเบ‡เบเบฒเบ™เป‚เบ—เบซเบฒเบ‡, เบซเบผเบทเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เป‚เบ—เบซเบฒเบ‡. เบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบเบฒเบ™เป‚เบ—เบซเบฒเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰
เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡เบขเบนเปˆเปƒเบ™เบ—เปˆเบฒเบซเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ„เบทเบเบฑเบšเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆ goto,
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. โ€” เบงเบดโ€‹เบเบดโ€‹เบžเบตโ€‹เป€เบ”เบ (-
http://en.wikipedia.org/wiki/Tail_call)

เบกเบฒเป‚เบ„เบฃ
loop
loop เบชเป‰เบฒเบ‡เบˆเบธเบ” recursion. เบเบฑเบš loop, recur rebinds เบ•เบปเบงเปเบ›เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™
เบˆเบธเบ” recursion เปเบฅเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบˆเบธเบ” recursion เบ™เบฑเป‰เบ™. เบ–เป‰เบฒ recur เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™
เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบซเบฒเบ‡, เบเบฒเบ™เบเบปเบเป€เบงเบฑเป‰เบ™เปเบกเปˆเบ™เบ–เบทเบเบ–เบดเป‰เบก.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: (เบงเบปเบ‡ เบเบฒเบ™เบœเบนเบเบกเบฑเบ” &เบžเบฑเบเบœเปˆเบญเบ™ เบฎเปˆเบฒเบ‡เบเบฒเบ)

เบ•เบปเบงเบขเปˆเบฒเบ‡:

(เบ•เป‰เบญเบ‡เบเบฒเบ™ hy.contrib.loop)

( defn factorial [n]
(เบงเบปเบ‡ [[เปƒเบ™] [acc 1]]
(เบ–เป‰เบฒ (เบชเบนเบ™? i)
acc
(เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบŠเป‰เบณ (dec i) (* acc i)))))

(เป‚เบฎเบ‡เบ‡เบฒเบ™ 1000)

defmulti
เปƒเปเปˆเปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 0.10.0.

defmulti เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™ arity-overload เบŸเบฑเบ‡เบŠเบฑเบ™เป‚เบ”เบเบˆเปเบฒเบ™เบงเบ™ args เปเบฅเบฐ/เบซเบผเบท kwargs เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰.
เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบปเบ™เปƒเบˆเบˆเบฒเบ Clojure's take on defn.

=> (เบ•เป‰เบญเบ‡เบเบฒเบ™ hy.contrib.multi)
=> (เบกเปˆเบงเบ™เบซเบผเบฒเบ
... ([a] "เบ")
... ([ab] "ab")
... ([abc] "abc"))
=> (เบกเปˆเบงเบ™ 1)
"เบ"
=> (เบกเปˆเบงเบ™ 1 2)
"ab"
=> (เบกเปˆเบงเบ™ 1 2 3)
"abc"

เบเบฒเบ™เปเบฎเบฑเบ ON HY


เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ เป„เบฎเบงเบต!
เบเบฐเบฅเบธเบ™เบฒเบกเบฒ hack เบชเบธเบ” Hy!

เบเบฐเบฅเบธเบ™เบฒเบกเบฒ hang out เบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ #เป€เบญเบต on irc.freenode.net!

เบเบฐเบฅเบธเบ™เบฒเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เบเปˆเบฝเบงเบเบฑเบš Twitter เบเบฑเบš #เป€เบญเบต เป€เบ„เบทเปˆเบญเบ‡โ€‹เบซเบกเบฒเบโ€‹เบชเบตเปˆโ€‹เบซเบผเปˆเบฝเบก!

เบเบฐเบฅเบธเบ™เบฒ blog เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™!

เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเบตเบ”โ€‹เบกเบฑเบ™โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบฎเบปเป‰เบงโ€‹เบ‚เบญเบ‡โ€‹เป€เบžเบทเปˆเบญเบ™โ€‹เบšเป‰เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™ (เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ‚เปโ€‹เบ‡เบฒเบกโ€‹)โ€‹!

เปเบฎเบ!
เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰:

1. เบชเป‰เบฒเบ‡เบ virtual เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก:

$ virtualenv venv

เปเบฅเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เบกเบฑเบ™:

$ . venv/bin/activate

เบซเบผเบทเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ virtualenvwrapper เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบฅเบฐเบˆเบฑเบ”เบเบฒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก virtual เบ‚เบญเบ‡เบ—เปˆเบฒเบ™:

$ mkvirtualenv hy
$ workon hy

2. เป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡:

$ git clone https://github.com/hylang/hy.git

เบซเบผเบทเปƒเบŠเป‰เบชเป‰เบญเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ:

clone $ git [email protected]: /hy.git

3. เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ hacking:

$ cd hy/
$ pip เบ•เบดเบ”เบ•เบฑเป‰เบ‡ -e .

4. เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ-y เบญเบทเปˆเบ™เป†:

$ pip เบ•เบดเบ”เบ•เบฑเป‰เบ‡ -r requirement-dev.txt

5. เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบซเบงเบฒเบ”เบชเบฝเบง; เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบœเบนเป‰โ€‹เปƒเบ”โ€‹เบœเบนเป‰โ€‹เบซเบ™เบถเปˆเบ‡ shriek เปƒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบเบดเบ™โ€‹เบ”เบต / disgust เปƒเบ™โ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”.

เบ—เบปเบ”เบชเบญเบš!
เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš/. เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ เบ”เบฑเบ‡.

เป€เบžเบทเปˆเบญโ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹:

$ เบเบฒเบ™เบเบงเบ”เบ”เบฑเบ‡

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบ‚เบฝเบ™ --- เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบกเปˆเบ™เบ”เบต!

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป€เบงเบ—เบตเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบฅเบฐเบชเปเบฒเบฅเบฑเบš PEP 8 เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบก
เบฅเบฐเบซเบฑเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™ tox:

$ tox

เป€เบญเบเบฐเบชเบฒเบ™!
เป€เบญเบเบฐเบชเบฒเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ docs/. เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ sphinx.

เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบญเบเบฐเบชเบฒเบ™เปƒเบ™ HTML:

$ cd docs
$ เป€เบฎเบฑเบ” html

เบ‚เบฝเบ™ docs---docs เปเบกเปˆเบ™เบ”เบต! เปเบกเปˆเบ™เปเบ•เปˆเป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰!

เบเบฒเบ™เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™
เบเบฒเบ™เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เปเบกเปˆเบ™เบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบš & เบŠเบทเปˆเบ™เบŠเบปเบกเบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ, เบ—เบธเบเป†เป€เบฅเบฑเบเบ™เป‰เบญเบเบˆเบฐเบŠเปˆเบงเบเป€เบฎเบฑเบ”เปƒเบซเป‰ Hy เบซเบผเบฒเบเบ‚เบถเป‰เบ™
เบซเบ™เป‰เบฒเบซเบงเบฒเบ”เบชเบฝเบง.

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปเบกเปˆเบ™เบ”เบตเบซเบผเบฒเบ! เบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบเบžเบงเบเป€เบ‚เบปเบฒ; เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ”เปˆเบงเบ™:

ยท Fork the repo เปเบฅเบฐเบชเป‰เบฒเบ‡เบชเบฒเบ‚เบฒเบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ” / เบเบฒเบ™เปเบเป‰เป„เบ‚. เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป‚เบ”เบเบเบปเบ‡
เปƒเบ™เบชเบฒเบ‚เบฒเปเบกเปˆเบšเบปเบ”.

ยท เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบ—เบฑเบ‡เปเบปเบ”เบ„เบงเบ™เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

ยทเบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบชเบปเปˆเบ‡ PR, เบเบฐเบฅเบธเบ™เบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ•เปเปˆเบเบฑเบšเบฎเบนเบšเปเบšเบš
เบ„เบนเปˆเบกเบท. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบ—เบฑเบ‡เบชเบญเบ‡เบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™:

$ เป€เบฎเบฑเบ”เปƒเบซเป‰ d

ยท เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบซเบ™เปˆเบงเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™โ€‹, เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบกเบฑเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เปเบฅเบฐโ€‹เบ™เปเบฒโ€‹เบ—เบฒเบ‡โ€‹เปƒเบ™โ€‹เบžเบฒเบโ€‹เบซเบผเบฑเบ‡โ€‹. เบเปˆเบญเบ™
เบชเบปเปˆเบ‡ PR, เบžเบฐเบเบฒเบเบฒเบก squashing commits เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒ
เบ•เปเปˆเบกเบฒ. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบ›เปˆเบญเบเปƒเบซเป‰เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡ spurious เปƒเบ™เบŠเบธเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡; เบ™เบตเป‰
เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡.

ยท เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฑเบ™เบเบฒเป„เบ›, เบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

ยท เบžเบฐเบเบฒเบเบฒเบกเบ•เบดเบ”เบขเบนเปˆเปƒเบ™เบ‚เบตเบ”เบˆเบณเบเบฑเบ” 50 เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบชเบณเบฅเบฑเบšเปเบ–เบงเบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก Git commit.

ยท เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”/เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ•เบดเบ”เบ•เบฒเบกเบญเบฑเบ™เบ™เบตเป‰เบ”เป‰เบงเบเป€เบชเบฑเป‰เบ™เป€เบ›เบปเปˆเบฒ เปเบฅเบฐเบชเบทเบšเบ•เปเปˆ
เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹.

ยทเบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบžเบตเปˆเบกเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เปƒเบชเปˆเป„เบŸเบฅเปŒ AUTHORS (เป€เบ›เบฑเบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ): เบ—เปˆเบฒเบ™เบชเบปเบกเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™ :)

ยทเบ—เบธเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบšเป‚เบ”เบ 2 เบชเบฐเบกเบฒเบŠเบดเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™เบซเบผเบฑเบเบ‚เบญเบ‡ Hylang.
เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบšเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ 2 signoffs เบชเปเบฒเบฅเบฑเบšเปƒเบ”เป†
เบ›เปˆเบฝเบ™เปเบ›เบ‡.

ยท เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบชเบฐโ€‹เบกเบฒโ€‹เบŠเบดเบโ€‹เบซเบผเบฑเบโ€‹เปเบกเปˆเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เปƒเบ™ PRโ€‹, เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบŠเบญเบโ€‹เบซเบฒ 2 เบชเบฐโ€‹เบกเบฒโ€‹เบŠเบดเบโ€‹เบซเบผเบฑเบโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบกเบตโ€‹
PR เบชเบปเปˆเบ‡. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบœเบนเป‰เบ‚เบฝเบ™ PR, เปเบฅเบฐ acks เบ—เบตเบชเบญเบ‡
เบŠเบธเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”.

ยท เบชเปเบฒเบฅเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™ & เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเบญเบทเปˆเบ™เป†, เบžเบงเบเป€เบฎเบปเบฒเบ”เบตเบ—เบตเปˆเบˆเบฐเบฅเบงเบกเบซเบผเบฑเบ‡เบˆเบฒเบเบซเบ™เบถเปˆเบ‡ ACK. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš
เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ•เปเปˆเบฒ, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบชเบฒเบชเบดเปˆเบ‡เบเบตเบ”เบ‚เบงเบฒเบ‡เบ™เบฑเป‰เบ™เปƒเบซเป‰เบ•เปเปˆเบฒ.

Core เบ—เบตเบกเบ‡เบฒเบ™
เบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบผเบฑเบเบ‚เบญเบ‡ Hy เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

ยท Julian Danjou

ยท Morten Linderud

ยท J Kenneth เบ„เบปเบ™

ยท Gergely เบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆ

ยท เป€เบกเบทเบญเบ‡ Tuukka เป€เบ•เบปเปˆเบฒ

ยท Karen Rustad

ยท Abhishek L

ยท Christopher Allan Webber

ยท เบ„เบญเบ™เบฃเบฒเบ” เบฎเบดเบ™เป€เบŠเบฑเบ™

ยท เบˆเบฐ Kahn-Greene

ยท Paul Tagliamonte

ยท Nicolas Dandrimont

ยท Bob Tolbert

ยท Berker เป€เบžเบฑเบ”เบชเบฐเปเบญเบ™

ยท Clinton N. Dreisbach

ยท han เปเบŠเบกเบกเบฐ

เปƒเบŠเป‰เบญเบญเบ™เป„เบฅเบ™เปŒ hy เป‚เบ”เบเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ onworks.net


เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบŸเบฃเบต

เบ”เบฒเบงเป‚เบซเบผเบ”เปเบญเบฑเบš Windows เปเบฅเบฐ Linux

  • 1
    NSIS: Nullsoft Scriptable Install System
    NSIS: Nullsoft Scriptable Install System
    NSIS (Nullsoft Scriptable Install
    System) เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบกเบทเบญเบฒเบŠเบตเบš
    เบฅเบฐเบšเบปเบšเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบปเบงเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Windows. เบกเบฑเบ™
    เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบซเป‰เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™
    เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰...
    เบ”เบฒเบงเป‚เบซเบฅเบ” NSIS: Nullsoft Scriptable Install System
  • 2
    เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡
    เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡
    AuthPass เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”
    เบœเบนเป‰โ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบดโ€‹เบเบปเบกโ€‹เปเบฅเบฐโ€‹
    เบžเบดเบชเบนเบ”เปเบฅเป‰เบง Keepass (kdbx 3.x เปเบฅเบฐ kdbx 4.x ...
    เบ”เบฒเบงเป‚เบซเบผเบ” authpass
  • 3
    Zabbix
    Zabbix
    Zabbix เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เบงเบดเบชเบฒเบซเบฐเบเบดเบ”เป€เบ›เบตเบ”
    เปเบซเบผเปˆเบ‡เบ—เบตเปˆเปเบˆเบเบขเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เปเบเป‰เป„เบ‚
    เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบก
    เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบฅเบฐเบ„เบงเบฒเบกเบžเป‰เบญเบกเบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ
    เป€เบŠเบตเบšเป€เบงเบต, เบญเบธเบ›เบฐเบเบญเบ™...
    เบ”เบฒเบงเป‚เบซเบฅเบ” Zabbix
  • 4
    เบšเปเบฅเบดเบชเบฑเบ” KDiff3
    เบšเปเบฅเบดเบชเบฑเบ” KDiff3
    เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ™เบตเป‰เบšเปเปˆเบ–เบทเบเบฎเบฑเบเบชเบฒเป„เบงเป‰เบญเบตเบเบ•เปเปˆเป„เบ›
    เปเบฅเบฐเบ–เบทเบเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เป€เบžเบทเปˆเบญเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบเบฒเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™. เป€เบšเบดเปˆเบ‡
    https://invent.kde.org/sdk/kdiff3 for
    เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เปƒเบซเบกเปˆโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹เปเบฅเบฐโ€‹
    https://download.kde.o...
    เบ”เบฒเบงเป‚เบซเบฅเบ” KDiff3
  • 5
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX เปเบกเปˆเบ™ GUI เบชเปเบฒเบฅเบฑเบš
    Loader USB เบ‚เบญเบ‡ Waninkoko, เบญเบตเบ‡เปƒเบชเปˆ
    libwiigui. เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบฅเบฒเบเบŠเบทเปˆเปเบฅเบฐ
    เป€เบ›เบตเบ”เป€เบเบก Wii, เป€เบเบก Cube เปเบฅเบฐ
    homebrew เปƒเบ™ Wii เปเบฅเบฐ WiiU ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” USBLoaderGX
  • 6
    Firebird
    Firebird
    Firebird RDBMS เบชเบฐเบซเบ™เบญเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” ANSI SQL
    & เปเบฅเปˆเบ™เปƒเบ™ Linux, Windows &
    เป€เบงเบ—เบต Unix เบซเบผเบฒเบ. เบ„เบธเบ™โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐ
    เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡ เปเบฅเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”
    เปเบฅเบฐเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™...
    เบ”เบฒเบงเป‚เบซเบฅเบ” Firebird
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Linux เบ„เบณ เบชเบฑเปˆเบ‡

  • 1
    aa-clickquery
    aa-clickquery
    aa-clickquery - เป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก
    click-apparmor DESCRIPTION: เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰
    เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบญเบšเบ–เบฒเบก click-apparmor เบชเปเบฒเบฅเบฑเบš
    เบ‚เปเป‰เบกเบนเบ™. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰: aa-clickquery
    --click-fra...
    เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ aa-clickquery
  • 2
    aa-exec-เบ„เบฅเบดเบ
    aa-exec-เบ„เบฅเบดเบ
    aa-exec-click - เป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”
    เบเบปเบ”เบซเบธเป‰เบกเบซเปเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบเบฑเบเบ‚เบฑเบ‡
    เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบžเบทเปˆเบญโ€‹
    เบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเบธเบ”เบ„เบฅเบดเบเบžเบฒเบเปƒเบ•เป‰ AppArmor
    เบเบฒเบ™เบเบฑเบเบ‚เบฑเบ‡. เบ‚เป‰เบญเบ...
    เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ aa-exec-click
  • 3
    coresendmsg
    coresendmsg
    coresendmsg - เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก CORE API
    เบเบฑเบš core-daemon daemon ...
    เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ coresendmsg
  • 4
    core_server
    core_server
    core_server - เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบš
    SpamBayes. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”: เบ›เบฐเบˆเบธเบšเบฑเบ™เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™
    เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ•เปŒเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบชเบฝเบšเป€เบ‚เบปเป‰เบฒ
    เบœเบนเป‰เบŸเบฑเบ‡เบชเปเบฒเบฅเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™เบ•เปˆเบฒเบ‡เป†เปเบกเปˆเบ™ TBD.
    เบ™เบตเป‰ ...
    เปเบฅเปˆเบ™ core_server
  • 5
    gappletviewer-4.8
    gappletviewer-4.8
    gappletviewer - เป‚เบซเบฅเบ”เปเบฅเบฐเปเบฅเปˆเบ™ applet
    ...
    เปเบฅเปˆเบ™ gappletviewer-4.8
  • 6
    gappletviewer-4.9
    gappletviewer-4.9
    gappletviewer - เป‚เบซเบฅเบ”เปเบฅเบฐเปเบฅเปˆเบ™ applet
    ...
    เปเบฅเปˆเบ™ gappletviewer-4.9
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Ad