英語フランス語スペむン語

Ad


OnWorksファビコン

hy - クラりド䞊のオンラむン

Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌを介しお、OnWorks の無料ホスティング プロバむダヌで hy を実行したす。

これは、Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌなどの耇数の無料オンラむン ワヌクステヌションの XNUMX ぀を䜿甚しお、OnWorks 無料ホスティング プロバむダヌで実行できるコマンド hy です。

プログラム

NAME


hy - hy ドキュメント [画像: Hy] [画像]

意図に基づいお、適切なメッセヌゞを適切なナヌザヌに適切なタむミングで Hy https://try-hy.appspot.com

PyPI https://pypi.python.org/pypi/hy

゜ヌス https://github.com/hylang/hy

リスト ハむランディスカッション

IRC #ハむ フリヌノヌド䞊

完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。 status
トラビス CI.むンデントなし

Hy は、Python に組み蟌たれた Lisp の玠晎らしい方蚀です。

Hy はその Lisp コヌドを Python 抜象構文ツリヌに倉換するので、次のようになりたす。
Python の矎しい䞖界党䜓を Lisp 圢匏ですぐに利甚できたす。

内容

クむックスタヌト


[画像: カレン・ラスタヌドの抱擁] [画像]

(抱っこしおくれたカレン・ラスタッドに感謝!)

HOW に GET HY リアル スピヌディヌ:

1。 䜜成する バヌチャル Python 環境.

2. 仮想 Python 環境をアクティブ化したす。

3。 むンストヌル hy から PyPI   ピップ install hy.

4. REPL を開始したす。 hy.

5. REPL に次のように入力したす。

=> (「やあ!」ず出力)
やあ
=> (defn salutationsnm [名前] (print (+ "Hy " name "!")))
=> (挚拶文「あなたの名前」)
こんにちは、あなたの名前です

等

6. 完了したら、CTRL-D を抌したす。

ああ、神様 それです 玠晎らしいです I 欲しいです 〜ぞ 曞きたす a Hy プログラム。

7. ゚リヌト プログラミング ゚ディタヌを開き、次のように入力したす。

(print "Python 構文でコヌディングする぀もりでしたが、Hy になりたした。")

8.名前を付けお保存 すごい.hy.

9. そしお、最初の Hy プログラムを実行したす。

やあすごい。

10.
過呌吞にならないように深呌吞したしょう。

11.
悪人のように埮笑んで隠れ家にこっそり行っお、蚀葉では蚀い衚せないようなこずをしおください。

チュヌトリアル


Hy チュヌトリアルぞようこそ!

䞀蚀で蚀えば、Hy は Lisp の方蚀ですが、その構造を Python に倉換するものです。
文字通り、Python の抜象構文ツリヌぞの倉換です。 もっず倧雑把に蚀うず、
぀たり、Hy は Python で舌足らずな人間なのです!)

これは、Hy がいく぀かのこずを意味しおいるので、非垞にクヌルです。

· 非垞にPython的だず感じるLisp

· Lispers にずっおは、Lisp のクレむゞヌな胜力を䜿甚する玠晎らしい方法ですが、Python の広い䞖界でも䜿甚できたす。
ラむブラリ (そうです、Lisp で Django アプリケヌションを䜜成できるようになりたした!)

· Pythonista にずっお、快適な Python から Lisp の探玢を始める玠晎らしい方法です。

· 誰にずっおも: 玠敵なアむデアがたくさん詰たった楜しい蚀語です。

Basic intro 〜ぞ リスプ for パむ゜ンニスタ
さお、あなたはこれたで Lisp を䜿ったこずはないかもしれたせんが、Python は䜿ったこずがあるでしょう。

Hy の「hello world」プログラムは、実際には非垞に単玔です。 詊しおみよう

(「Hello World」を印刷)

芋る 簡単 ご想像のずおり、これは次の Python バヌゞョンず同じです。

「ハロヌワヌルド」を印刷する

非垞に単玔な蚈算を加えるず、次のようになりたす。

(+1 3)

これは 4 を返し、次ず同等になりたす。

1 + 3

リストの最初の項目が呌び出される関数であり、
残りの匕数は枡される匕数です。実際、Hy では (ほずんどの堎合ず同様)
Lisp) 耇数の匕数を plus 挔算子に枡すこずができたす。

(+1 3 55)

これは 59 を返したす。

おそらく、Lisp に぀いお聞いたこずはあっおも、それに぀いおはあたり知らないかもしれたせん。 Lispはあなたほど難しくありたせん
Hy は Python から継承しおいるため、Hy は Lisp の孊習を始めるのに最適な方法です。
Lisp に関しお明らかな䞻な点は、括匧がたくさんあるずいうこずです。 これはもしかしたら
最初は戞惑うように思えたすが、それほど難しいこずではありたせん。 簡単な数孊を芋おみたしょう。
Hy むンタヌプリタに入力できる括匧の束で囲たれおいたす。

(setv 結果 (- (/ (+ 1 3 88) 2) 8))

これは 38 を返したす。しかし、なぜでしょうか? さお、同等の匏を次のように芋るこずができたす。
パむ゜ン:

結果 = ((1 + 3 + 88) / 2) - 8

䞊蚘が Python でどのように機胜するかを理解しようずするず、もちろん次のようになりたす。
それぞれの内偎の括匧を解くこずで結果を導き出したす。 それは同じ基本的な考え方です
やあ。 たずは Python でこの挔習を詊しおみたしょう。

結果 = ((1 + 3 + 88) / 2) - 8
# 簡略化するず...
結果 = (92 / 2) - 8
# 簡略化するず...
結果 = 46 - 8
# 簡略化するず...
結果= 38

次に、Hy で同じこずを詊しおみたしょう。

(setv 結果 (- (/ (+ 1 3 88) 2) 8))
; 簡略化するず...
(setv結果(-(/92)2))
; 簡略化するず...
(setv結果(-46))
; 簡略化するず...
(setv結果38)

おそらくご想像のずおり、この最埌の衚珟は セット 倉数を代入するこずを意味したす
「結果」は38たで。

芋る あたり倧倉ではありたせん

これは Lisp の基本前提です。 Lisp は「リスト凊理」の略です。 これは、
プログラムの構造は実際にはリストのリストです。 (Pythonに詳しい方なら
リストの堎合、䞊蚘ず同じ構造を想像しおください。ただし、代わりに角かっこが䜿甚されおいたす。
䞊蚘の構造をプログラムずデヌタ構造の䞡方ずしお芋るこずができたす)。
より倚くの䟋を䜿甚するず理解しやすいので、簡単な Python プログラムを䜜成しおテストしおみたしょう。
次に、同等の Hy プログラムを衚瀺したす。

def simple_conversation():
print 「こんにちはあなたのこずを知りたいのですが、あなた自身に぀いお教えおください。」
name = raw_input("あなたの名前は䜕ですか?")
age = raw_input("あなたの幎霢は䜕歳ですか? ")
print "こんにちは " + 名前 + "! あなたは " + 幎霢 + " 歳ですね。"

simple_conversation()

このプログラムを実行するず、次のようになりたす。

こんにちは あなたず知り合いになりたいです。 自己玹介をお願いしたす
名前はなんですか ゲむリヌ
あなたは䜕歳ですか 38
こんにちは、ゲむリヌ 38歳だそうですね。

次に、同等の Hy プログラムを芋おみたしょう。

(defn 簡単な䌚話 []
「こんにちはあなたのこずを知りたいです。あなた自身に぀いお教えおください」を印刷
(setv name (生入力「あなたの名前は䜕ですか?」))
(setv age (生入力「あなたの幎霢は䜕ですか?」))
(print (+ "こんにちは " name "! あなたは "
幎霢 " 歳。")))

(簡単な䌚話)

䞊蚘のプログラムを芋るず、それぞれの最初の芁玠が
プログラムのリストは呌び出される関数 (たたはマクロ...埌で説明したす) です。
残りが匕数であるず考えれば、これが䜕を意味するのかを理解するのは非垞に簡単です。
(あなたもおそらくご想像のずおり、 定矩 メ゜ッドを定矩する Hy メ゜ッドです)。

それでも、かっこが倚すぎるため、最初は混乱する人が倚いです。
しかし、これを簡単にするために圹立぀ものがたくさんありたす。むンデントを適切に保぀こずず、
括匧を䞀臎させお゚ディタを䜿甚したす (これは、それぞれが䜕を意味するかを理解するのに圹立ちたす)
括匧は) ず組み合わせるず、快適に感じられるようになりたす。

実際には非垞に単玔なデヌタであるコヌド構造を持぀こずにはいく぀かの利点がありたす
Lisp のコアずなる構造が基づいおいたす。 たず、それはあなたのプログラムが
解析が簡単で、プログラムの実際の構造党䜓が非垞に明確に露出されたす。
あなたぞ。 (hy には、衚瀺されおいる構造が Python の構造に倉換される远加のステップがありたす。
独自の衚珟 ... Common Lisp や Emacs Lisp などの「より玔粋な」Lisp では、デヌタ
コヌド内に衚瀺される構造ず、実行されるデヌタ構造はさらに耇雑です。
文字通り近いです。

これのもう XNUMX ぀の意味はマクロです。プログラムの構造が単玔なデヌタの堎合
぀たり、非垞に簡単にコヌドを蚘述できるコヌドを䜜成できるずいうこずです。
たったく新しい蚀語機胜を非垞に迅速に実装できたす。 Hy の前はそうではありたせんでした
Python プログラマヌにずっおは非垞に可胜です...これであなたもマクロの驚異的な機胜を利甚できるようになりたす
力を入れおください足元に向けないように泚意しおください

Hy is a Lisp颚味 Python
Hy は Python 独自の抜象構文ツリヌに倉換するため、すぐにすべおのこずが分かるでしょう。
おなじみの Python のパワヌをすぐに利甚できたす。

Hy の Python のデヌタ型ず暙準ラむブラリに完党にアクセスできたす。 実隓しおみたしょう
hy むンタプリタでは次のようになりたす。

=> [1 2 3]
[1、2、3]
=> {「犬」「吠える」
...「猫」「ニャヌ」}
...
{'犬': '鳎き声', '猫': 'ニャヌ'}
=> (, 1 2 3)
1、2、3

他の Lisp に粟通しおいる堎合は、Hy が Common Lisp をサポヌトしおいるこずに興味があるかもしれたせん。
Lisp による匕甚方法:

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

すべおの組み蟌み型の䟿利なメ゜ッドにもアクセスできたす。

=> (.strip " fooooo ")
「ふおおお」

これは䜕ですか はい、確かに、これは次ずたったく同じです。

" ふぉおお ".strip()

そう、ドット蚘法を䜿ったLispなのです この文字列を倉数ずしお割り圓おた堎合、
次のこずもできたす。

(setv this-string " fooooo ")
(この文字列.ストリップ)

条件文に぀いおはどうですか?:

(if (䜕かを詊しおみる)
(「これが true の堎合」を出力)
(「これが false の堎合」を出力))

䞊でわかるように、最初の匕数は if は真実テスト、XNUMX 番目の匕数は
true の堎合は本文、false の堎合は XNUMX 番目の匕数 (オプション!) です。 ほかに).

より耇雑な条件を実行する必芁がある堎合は、次のものがないこずがわかりたす。 elif
ハむで利甚可胜です。 代わりに、ず呌ばれるものを䜿甚する必芁がありたす。 条件。 Python では、次のようにするこずができたす
䜕かのようなもの

サムバヌ = 33
somevar > 50の堎合:
print "その倉数は倧きすぎたす!"
elif somevar < 10:
print "その倉数は小さすぎたす!"
その他
print "その倉数はたさに正しいです!"

Hy では、次のようにしたす。

(条件
[(> somevar 50)
(print "その倉数は倧きすぎたす!")]
[(< somevar 10)
(print "その倉数は小さすぎたす!")]
[真実
(print "その倉数はたさに正しい!")])

あなたが気づくこずは、 条件 実行されるステヌトメントずステヌトメントの間でスむッチをオフにしたす。
真か停かを条件付きでチェックし、結果が倉わった堎合に実行する少しのコヌド
それは真実です。 たた、 ほかに 最埌に単に次のように実装されたす
のチェック true -- それはなぜですか true は垞に true になるので、ここたで到達したら、
垞にそれを実行しおください

次のようなコヌドがある堎合、䞊蚘のこずに気づくかもしれたせん。

(䜕らかの条件がある堎合
(trueの堎合の本䜓)
(停の堎合の本䜓))

ちょっず埅っお 次のいずれかの本文で耇数のステヌトメントを実行したい堎合はどうすればよいですか?
これらは

次のこずができたす。

(if (䜕かを詊しおみる)
から
(「これが true の堎合」を出力)
(print "そしおなぜそうではないのか、それがいかに真実であるかに぀いお話し続けたしょう!))
(「これはただ単に停です」ず衚瀺したす))

䜿甚したこずがわかりたす do 耇数のステヌトメントをラップしたす。 他に詳しいなら
Lisp、これは次のものず同等です 突起 他の堎所。

コメントはセミコロンで始たりたす。

(「これは実行されたす」ず印刷)
; (「しかし、これはそうではありたせん」ず印刷)
(+ 1 2 3) ; 远加は実行したすが、このコメントは実行したせん。

ルヌプ凊理は難しいこずではありたせんが、ある皮の特別な構造を持っおいたす。 Python では、次のようにしたす。

私のために 範囲10
print "'i' は珟圚 " + str(i) にありたす

Hy では次のようになりたす。

([i (範囲 10)] の堎合
(print (+ "'i' は珟圚 " (str i)) にありたす))

さたざたな Python ラむブラリをむンポヌトしお䜿甚するこずもできたす。 䟋えば

(OSをむンポヌト)

(if (os.path.isdir "/tmp/somedir")
(os.mkdir "/tmp/somedir/anotherdir")
(「おい、その道はないよ!」ず印刷))

Python のコンテキスト マネヌゞャヌ (  ステヌトメント) は次のように䜿甚されたす。

([[f ("/tmp/data.in" を開く)]] を䜿甚
(print (.read f)))

これは次ず同等です

open("/tmp/data.in") を f ずしお䜿甚:
print f.read()

そしおはい、リスト内包衚蚘がありたす。 Python では次のようにするこずができたす。

オッズ二乗 = [
pow(num, 2)
番号入力甚 範囲(100)
if num % 2 == 1]

Hy では、次のように実行できたす。

(setv オッズ二乗
(リスト-コンプ
(パワヌ番号 2)
(数倀(範囲100))
(= (% num 2) 1)))

; そしお、䟋は Clojure ペヌゞから恥知らずにも盗たれたした:
; チェス盀のすべおのブロックをリストしおみたしょう。

(リスト-コンプ
(、xy)
(x (範囲 8)
y "ABCDEFGH"))

; [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'), (0, 'F'), ( 0, 'G')、(0, 'H')、
; (1, 'A')、(1, 'B')、(1, 'C')、(1, 'D')、(1, 'E')、(1, 'F')、(1 、'G')、(1、'H')、
; (2, 'A')、(2, 'B')、(2, 'C')、(2, 'D')、(2, 'E')、(2, 'F')、(2 、'G')、(2、'H')、
; (3, 'A')、(3, 'B')、(3, 'C')、(3, 'D')、(3, 'E')、(3, 'F')、(3 、'G')、(3、'H')、
; (4, 'A')、(4, 'B')、(4, 'C')、(4, 'D')、(4, 'E')、(4, 'F')、(4 、'G')、(4、'H')、
; (5, 'A')、(5, 'B')、(5, 'C')、(5, 'D')、(5, 'E')、(5, 'F')、(5 、'G')、(5、'H')、
; (6, 'A')、(6, 'B')、(6, 'C')、(6, 'D')、(6, 'E')、(6, 'F')、(6 、'G')、(6、'H')、
; (7, 'A')、(7, 'B')、(7, 'C')、(7, 'D')、(7, 'E')、(7, 'F')、(7 、'G')、(7、'H')]

Python は、さたざたな掟手な匕数ずキヌワヌド匕数をサポヌトしおいたす。 Python では次のようになりたす。
芋る

>>> defOptional_arg(pos1, pos2, キヌワヌド 1=なし, キヌワヌド 2=42):
... return [pos1, pos2, キヌワヌド1, キヌワヌド2]
...
>>> オプション匕数(1, 2)
[1、2、なし、42]
>>> オプション匕数(1, 2, 3, 4)
[1、2、3、4]
>>> オプション匕数(キヌワヌド 1=1、䜍眮 2=2、䜍眮 1=3、キヌワヌド 2=4)
[3、2、1、4]

Hyでも同じこず:

=> (defn オプション匕数 [pos1 pos2 &オプションのキヌワヌド 1 [キヌワヌド 2 42]]
... [pos1 pos2 キヌワヌド1 キヌワヌド2])
=> (オプションの匕数 1 2)
[1 2 なし 42]
=> (オプションの匕数 1 2 3 4)
[1 2 3 4]

Hy の 0.10.1 以降のバヌゞョン (䟋: git master) を実行しおいる堎合は、新しい䟿利な機胜もありたす。
キヌワヌド匕数の構文:

=> (オプションの匕数:キヌワヌド1 1
... :pos2 2
... :pos1 3
... :キヌワヌド2 4)
[3、2、1、4]

それ以倖の堎合は、い぀でも䜿甚できたす 適甚する。 しかし、䜕ですか 適甚する?

通過するこずに慣れおいたすか * args & ** kwargs Python で?:

>>> 匕数 = [1 2]
>>> kwargs = {"キヌワヌド2": 3
... "キヌワヌド1": 4}
>>>Optional_arg(*args, **kwargs)

これを再珟できるのは、 適甚する:

=> (setv args [1 2])
=> (setv kwargs {"キヌワヌド2" 3
... "キヌワヌド 1" 4})
=> (optional-arg args kwargs を適甚)
[1、2、4、3]

次のような蟞曞スタむルのキヌワヌド匕数の構造もありたす。

(defn 別のスタむル [&key {"key1" "val1" "key2" "val2"}]
[キヌ1 キヌ2])

ここでの違いは、これは蟞曞であるため、特定の甚語に䟝存できないこずです。
匕数の順序付け。

Hyもサポヌトしたす * args & ** kwargs。 Pythonの堎合

def some_func(foo, bar, *args, **kwargs):
印刷物をむンポヌトする
pprint.pprint((foo, bar, args, kwargs))

Hy に盞圓するもの:

(defn some-func [foo bar &rest args &kwargs kwargs]
(印刷物をむンポヌト)
(pprint.pprint (, foo bar args kwargs)))

最埌に、もちろん授業が必芁です。 Python では、次のようなクラスが考えられたす。

クラスFooBar(オブゞェクト):
「」 "
さらに別のクラスの䟋
「」 "
def __init__(self, x):
self.x = x

def get_x(self):
「」 "
x のコピヌを返したす
「」 "
self.x を返す

ハむでは

(defclass FooBar [オブゞェクト]
「さらに別のクラス䟋」
[[ - 初期化 -
(fn [自分自身 x]
(setv self.xx)
; __init__ には None が必芁なため、珟圚 --init-- に必芁です
; これがなくなるこずを願っおいたす:)
なし]

[取埗-x
(fn [自分自身]
「x のコピヌを返しおください」
self.x)]])

クラスレベルの属性を実行するこずもできたす。 Python の堎合:

クラス顧客(models.Model):
名前 = モデル.CharField(max_length=255)
アドレス = モデル.TextField()
メモ = models.TextField()

ハむでは

(defclass Customer [models.Model]
[[名前 (models.CharField :最倧長 255})]
[アドレス(models.TextField)]
[メモ (models.TextField)]])

Hy <-> Python 盞互運甚
Hy をむンポヌトするず、Python から盎接 Hy を䜿甚できるようになりたす。

以䞋を保存するず ご挚拶.hy:

(defngreet [名前] (print "hello from hy," name))

その埌、モゞュヌルをむンポヌトする前に hy をむンポヌトするこずで、Python から盎接䜿甚できたす。 の
Python

むンポヌトハむ
挚拶文をむンポヌトする

挚拶.greet("フヌ")

Python で関数 (たたはクラス!) を宣蚀し、それを Hy! で䜿甚するこずもできたす。

以䞋を保存するず 挚拶.py Pythonの堎合

デフォルトの挚拶(名前):
print("こんにちは、%s" % (名前))

Hy で䜿甚できたす。

(挚拶をむンポヌト)
(.挚拶「ふヌ」)

キヌワヌド匕数を䜿甚するには、次のように䜿甚できたす。 挚拶.py:

def 挚拶(名前、タむトル = "先生"):
print("こんにちは、%s %s" % (タむトル,名前))

(挚拶をむンポヌト)
(「フヌ」ず挚拶)
(.挚拶「フヌ」「ダヌス」)
(適甚 (. 挚拶 挚拶) ["Foo"] {"title" "Lord"})

どちらが出力されたすか

こんにちは、フヌ卿

こんにちは、ダヌス・フヌ

こんにちは、フヌ様

ヒント
Hy には、「スレッド マクロ」ずしお知られる機胜もありたす。これは、Hy の非垞に優れた機胜です。
クロヌゞュアさん。 「スレッドマクロ」次のように蚘述されたす ->) は、深いネストを避けるために䜿甚されたす。
匏。

スレッド マクロは、各匏を次の匏の最初の匕数に挿入したす。
堎所。

叀兞的なものを取り䞊げおみたしょう。

(ルヌプ (print (eval (read))))

このように曞くのではなく、次のように曞くこずもできたす。

(-> (読み取り) (評䟡) (印刷) (ルヌプ))

今、を䜿甚しお Python-sh、スレッドマクロがどのように実行されるかを瀺すこずができたすpython-shのセットアップのため
パむプのように䜿甚できたす。

=> (むンポヌト [sh [cat grep wc]])
=> (-> (cat "/usr/share/dict/words") (grep "-E" "^hy") (wc "-l"))
210

もちろん、これは次のように拡匵されたす。

(wc (grep (cat "/usr/share/dict/words") "-E" "^hy") "-l")

はるかに読みやすくなりたしたね? スレッドマクロを䜿っおみよう

HY スタむル ガむド


「ご存知のように、倧臣、私は倚くの点でダンブルドアの考えに同意したせん しかし、圌がそうであるこずを吊定するこずはできたせん。
スタむルがある 」 — フィニアス・ナむゞェラス・ブラック、 ハリヌ ポッタヌ &   泚文 of   フェニックス

Hy スタむル ガむドは、Hyve (そう、Hy コミュニティ) の䞀連の基本ルヌルずなるこずを目的ずしおいたす。
すべおに Hy を远加しお慣甚的な Hy コヌドを蚘述するこずに誇りを持っおいたす。 Hy は倚くのこずをもたらしたす
Clojure ず Common Lisp からの移行を実珟しながら、Python の盞互運甚性を垞に維持したす。

前奏曲
  道 of Hy
雲門は䜏職に「䜕のお経を説いおいるのですか」ず尋ねたした。
「涅槃経」。
「涅槃経には四埳がありたすね」
「それはありたす。」
りンモンはカップを手に取りながら尋ねた、「これにはいく぀の埳があるの」
「䜕もありたせん」ず僧䟶は蚀いたした。
「でも叀代の人たちはそうだったっお蚀っおたよね」 りンモンは蚀った。
「圌らが蚀ったこずに぀いおどう思いたすか」
りンモンはカップをたたき、「分かりたしたか」ず尋ねた。
「いいえ」ず僧䟶は蚀いたした。
「それでは、お経の講矩を続けたほうがいいでしょう」ずりンモンは蚀いたした。
— (公案) マクロ

以䞋に、䜜成にあたり行われた蚭蚈䞊の決定事項の簡単なリストを瀺したす。
HY。

· Lisp のように芋えたす。 DTRT を䜿甚するず (䟋: ダッシュがアンダヌスコアに倉わり、むダヌマフが
すべお倧文字。

· 私たちはただ Python です。 ほずんどの内郚は 1:1 で Python 内郚に倉換されたす。

· あらゆる堎所で Unicode を䜿甚したす。

· 可胜な堎合は、Python 2 の誀った決定を修正したす (「 true_division).

· 疑問がある堎合は、Python を䜿甚しおください。

· それでも䞍明な堎合は、Clojure を参照しおください。

· さらに確信が持おない堎合は、Common Lisp を参照しおください。

· 私たちは Clojure ではないこずに留意しおください。 私たちはCommon Lispではありたせん。 私たちはホモむコニック Python です。
意味のある䜙分なビット。

レむアりト & むンデント
· 末尟のスペヌスは避けおください。 最悪だ

· むンデントは 2 スペヌスハヌドタブなしずする。ただし、むンデントが䞀臎する堎合を陀く。
前の行。

;; 良いそしお奜たしい
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))

;; ただ倧䞈倫
(defn fib [n]
(if (<= n 2) n (+ (fib (- n 1)) (fib (- n 2))))

;; ただ倧䞈倫
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))

;; ヒステリックにばかばかしい
(defn fib [n]
(if (<= n 2)
ん;; はい、スペヌスキヌをランダムに抌すのが倧奜きです
(+ (fib (- n 1)) (fib (- n 2))))

· 括匧は必須です 決しお 䞀人で取り残され、悲しくお孀独です。

;; 良いそしお奜たしい
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))

;; ヒステリックにばかばかしい
(defn fib [n]
(if (<= n 2)
n
(+ (fib (- n 1)) (fib (- n 2)))
)
) ; ああ、火で燃やしおしたえ

・瞊に揃える う ブロック。

(let [[foo (bar)]
[qux(バズ)]]
(フヌクックス))

· むンラむン コメントはコヌドの末尟から XNUMX ぀のスペヌスでなければなりたせん。 圌らは垞に
コメント文字ずコメントの先頭の間のスペヌス。 たた、そうしないようにしおください。
明らかなこずをコメントしたす。

;; 良い
(setv ind (dec x)) ; むンデックスは 0 から始たりたす

;; スタむルに準拠しおいるが、明癜なこずだけを述べおいる
(setv ind (dec x)) ; むンデックスを x-1 に蚭定したす

;; 悪い
(setv ind (dec x));楜しみのために単語を入力する

コヌディング 圢匏
· 慣䟋ずしお、䜿甚しないようにしおください。 def グロヌバル倉数以倖の堎合。 䜿甚 セット
関数やルヌプなどの内郚。

;; 良いそしお奜たしい
(デフォルト *制限* 400000)

(定矩 fibs [ab]
(本圓ですが
(収量a)
(setv (, ab) (, b (+ ab))))

;; 悪いそしお奜たしくない
(定矩 fibs [ab]
(本圓ですが
(収量a)
(def (, ab) (, b (+ ab))))

· ベクトル構文が意図されおいる堎所では、s 匏構文を䜿甚しないでください。 たずえば、事実
これら XNUMX ぀の䟋のうち前者が機胜するのは、コンパむラが過床に機胜しおいないだけです。
厳しい。 実際には、このような堎所での正しい構文は埌者です。

;; 悪いそしお邪悪
(defn foo (x) (print x))
(foo1)

;; 良いそしお奜たしい
(defn foo [x] (print x))
(foo1)

· 深くネストされたマクロが発生した堎合は、スレッド マクロたたはスレッド テヌル マクロを䜿甚したす。
S 匏。 ただし、䜿甚するずきは慎重にしおください。 明確な堎合にはそれらを䜿甚しおください。
可読性が向䞊したす。 耇雑で理解しにくい匏を䜜成しないでください。

;; 奜たしい
(def *名前*
([f (「names.txt」を開く)] 付き)
(-> (.read f) (.strip) (.replace "\"" "") (.split ",") (sorted)))

;; あたりよくない
(def *名前*
([f (「names.txt」を開く)] 付き)
(゜ヌト枈み (.split "," (.replace "\"" "" (.strip (.read f))))))

;; おそらく良いアむデアではないでしょう
(定矩平方? [x]
(->> 2 (pow (int (sqrt x))) (= x)))

· Clojure スタむルのドット衚蚘法は、オブゞェクトのメ゜ッドを盎接呌び出すよりも優先されたす。
ただし、どちらも匕き続きサポヌトされたす。

;; 良い
([fd (開く "/etc/passwd"]
(print (.readlines fd)))

;; あたりよくない
([fd (開く "/etc/passwd"]
(print (fd.readlines)))

たずめ
「ファッションは消えたすが、スタむルは氞遠です」 - むノ・サンロヌラン

このガむドは単なるコミュニティ ガむドラむンのセットであり、明らかにコミュニティ ガむドラむンは次のこずを行いたす。
掻発なコミュニティがなければ意味がありたせん。 貢献は倧歓迎です。 #hy in で参加したしょう
freenode に぀いおブログを曞いたり、ツむヌトしたり、そしお最も重芁なこずずしお、Hy を楜しんでください。

感謝
· このガむドは、以䞋から倚倧な圱響を受けおいたす。 @ポヌルタグ さんのブログ投皿 Hy 生存 ガむド

・ Clojureの 圢匏 ガむド

マニュアル INDEX


内容

Command LINE むンタフェヌス
hy
Command LINE オプション
-c
Hy コヌドを実行したす。 command.

$ hy -c "(print (+ 2 2))"
4

-i
Hy コヌドを実行したす。 command、その埌はREPLに留たりたす。

-m
Hy コヌドを実行したす。 モゞュヌル含みたす 定矩する 定矩されおいる堎合。

  -m フラグはオプション リストを終了し、その埌のすべおの匕数が終了したす。 モゞュヌル 名
のモゞュヌルに枡されたす sys.argv.

バヌゞョン 0.10.2 の新機胜。

- スパむ 実行前に同等の Python コヌドを出力したす。 䟋えば

=> (defn salutationsnm [名前] (print (+ "Hy " name "!")))
def salutationsnm(名前):
return print(((u'Hy ' + 名前) + u'!'))
=> (挚拶文「あなたの名前」)
salutationsnm(u'あなたの名前')
こんにちは、あなたの名前です
=>

バヌゞョン 0.9.11 の新機胜。

--show-トレヌスバック
Hy 䟋倖の拡匵トレヌスバックを出力したす。

バヌゞョン 0.9.12 の新機胜。

-v Hy のバヌゞョン番号を出力しお終了したす。

やあ
Command LINE オプション
ファむル[、 ファむルN]
Hy コヌドを Python バむトコヌドにコンパむルしたす。 たずえば、次のコヌドを次のように保存したす。
ハむネヌム.hy:

(defn hy-hy [名前]
(print (+ "名前"!")))

(ハむハむ「アフロマン」)

次に、

$ hyc hyname.hy
$ python hyname.pyc
やあアフロマン

hy2py
バヌゞョン 0.10.1 の新機胜。

Command LINE オプション
-s

--゜ヌス付き
解析された゜ヌス構造を衚瀺したす。

-a

--ast 付き
生成されたASTを衚瀺したす。

-np

--Python なし
AST から生成された Python コヌドは衚瀺したせん。

Hy  蚀語
譊告
これは䞍完党です。 文曞化䜜業ぞの貢献を怜蚎しおください。

理論 of Hy
Hy は、䜕よりも Python ずの双方向で 100% の互換性を維持したす。
自䜓。 すべおの Hy コヌドは、いく぀かの簡単なルヌルに埓いたす。 これは入っおくるので芚えおおいおください
ハンディ。

これらのルヌルは、Hy コヌドが慣甚的であり、䞡方の蚀語でむンタヌフェむス可胜であるこずを保蚌するのに圹立ちたす。

· むダヌマフ内の蚘号は、その文字列の倧文字バヌゞョンに倉換されたす。 ために
䟋、 foo になりたす FOO.

· UTF-8 ゚ンティティは次を䜿甚しお゚ンコヌドされたす。 Punycode そしお接頭蟞が やあ。 䟋えば、 ⚘
になりたす hy_w7h, ♥ になりたす hy_g6h, i♥u になりたす hy_iu_t0x.

· ダッシュを含む蚘号はアンダヌスコアに眮き換えられたす。 䟋えば、
レンダリングテンプレヌト になりたす レンダヌテンプレヌト。 ぀たり、ダッシュ付きの蚘号は
盞圓するアンダヌスコアをシャドりむングし、その逆も同様です。

ビルトむン
Hy には、正しい Python AST を生成するために䜿甚される特別なフォヌムが倚数備わっおいたす。
以䞋は「特別な」圢匏であり、䞀郚では予期しない動䜜をする可胜性がありたす。
いく぀かの状況。

.
バヌゞョン 0.10.0 の新機胜。

. オブゞェクトの属性アクセスを実行するために䜿甚されたす。 小芏暡な DSL を䜿甚しお、迅速な凊理を可胜にしたす。
ネストされたデヌタ構造内の属性ず項目ぞのアクセス。

䟋えば、

(.foo bar baz [(+ 1 2)] フロブ)

コンパむルするず次のようになりたす。

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

. 最初の匕数をコンパむルしたす (䟋では、 foo) を実行するオブゞェクトずしお
属性の逆参照。 アクセスするための属性ずしお裞のシンボルを䜿甚したす (䟋では、 バヌ,
バズ, フロブ)、リストの内容をコンパむルしたす (䟋では、 [(+ 1 2)]) むンデックス䜜成甚。
他の匕数はコンパむル ゚ラヌをスロヌしたす。

䞍明な属性にアクセスするず、 属性゚ラヌ。 䞍明なキヌにアクセスするず、
むンデックス゚ラヌ (リストおよびタプル䞊) たたは キヌ゚ラヌ 蟞曞に茉っおいたす。

->
-> たたは スレッディング マクロ) は、匏のネストを避けるために䜿甚されたす。 スレッドマクロ
各匏を次の匏の最初の匕数の堎所に挿入したす。 以䞋
コヌドはこれを瀺しおいたす:

=> (defn 出力 [ab] (print ab))
=> (-> (+ 4 6) (出力 5))
10 5

->>
->> たたは スレッディング tail マクロ) に䌌おいたす スレッディング マクロ、しかし代わりに
各匏を次の匏の最初の匕数に挿入するず、それが
最埌の匕数。 次のコヌドはこれを瀺しおいたす。

=> (defn 出力 [ab] (print ab))
=> (->> (+ 4 6) (出力 5))
5 10

適甚する
適甚する 匕数のオプションのリストず kwargs のオプションの蟞曞を適甚するために䜿甚されたす。
関数に。

䜿甚法 申し蟌み fn-name [匕数] [クワヌグス])

䟋

(定矩サンク []
「こんにちは」

(サンクを適甚)
;=> 「こんにちは」

(定矩合蚈賌入額 [䟡栌金額 & オプション [手数料 1.05] [付加䟡倀皎 1.1]]
(*䟡栌・金額・手数料・消費皎))

(合蚈賌入額[10 15]を適甚)
;=> 173.25

(合蚈賌入額 [10 15] {"vat" 1.05} を適甚)
;=> 165.375

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

&
& 論理匏で䜿甚されたす。 少なくずも XNUMX ぀のパラメヌタが必芁です。 すべおのパラメヌタの堎合
評䟡する ◯、最埌のパラメヌタが返されたす。 それ以倖の堎合は、最初の false 倀
返されたす。 䜿甚䟋:

=> (そしお真停)
×

=> (そしお真、真)
◯

=> (そしお真 1)
1

=> (および True [] False True)
[]

泚意
& 最初の false が返されるずすぐにパラメヌタの評䟡をショヌトしお停止したす。
遭遇した。

=> (および False (「hello」を出力))
×

アサヌト
アサヌト プログラムの実行䞭に条件を確認するために䜿甚されたす。 条件が敎っおいない堎合
䌚った、 アサヌション ゚ラヌ 䞊げられたす。 アサヌト XNUMX ぀たたは XNUMX ぀のパラメヌタを取るこずができたす。 最初
パラメヌタはチェックする条件であり、次のいずれかに評䟡される必芁がありたす。 ◯ or ×を遞択したす。
XNUMX 番目のパラメヌタはオプションで、アサヌトのラベルであり、
ず䞀緒に育おられた アサヌション ゚ラヌ 䟋えば

(assert(=倉数期埅倀))

(停を䞻匵)
; アサヌション ゚ラヌ

(アサヌト (= 1 2) 「XNUMX は XNUMX に等しいはずです」)
; AssertionError: XNUMX は XNUMX に等しい必芁がありたす

連想
連想 キヌを蟞曞内の倀に関連付けたり、リストのむンデックスを蚭定したりするために䜿甚されたす。
倀に。 少なくずも XNUMX ぀のパラメヌタを取りたす。 デヌタ 構造 倉曎される、 キヌ
or index、ず 倀。 XNUMX ぀以䞊のパラメヌタが䜿甚される堎合、ペアで関連付けられたす。

䜿甚䟋

=>(let [[コレクション {}]]
... (ア゜シ゚むトコレクション「犬」「暹皮」)
... (版画集))
{u'犬': u'吠える'}

=>(let [[コレクション {}]]
... (ア゜シ゚むトコレクション「犬」「鳎き声」「猫」「ニャヌ」)
... (版画集))
{u'猫': u'ニャヌ'、u'犬': u'吠える'}

=>(let [[コレクション [1 2 3 4]]]
... (関連コレクション 2 なし)
... (版画集))
[1、2、なし、4]

泚意
連想 デヌタ構造を適切に倉曎しお返したす。 なし.

ç Žã‚‹
ç Žã‚‹ ルヌプから抜け出すために䜿甚したす。 ルヌプは盎ちに終了したす。 以䞋
䟋には無限がありたす while ナヌザヌが入力するずすぐに終了するルヌプ k.

(while True (if (= "k" (生の入力 "? "))
壊す
(「もう䞀床詊しおください」ず印刷したす)))

条件
条件 ネストされた構築に䜿甚できたす if 発蚀。 次の䟋は、
マクロずその展開の関係:

(cond [条件-1 結果-1]
[条件-2 結果-2])

(if 条件-1 結果-1
(if 条件-2 結果-2))

以䞋に瀺すように、最初に䞀臎した結果ブロックのみが実行されたす。

=> (defn チェック倀 [倀]
... (cond [(< value 5) (print "倀が 5 より小さい")]
... [(= 倀 5) (print "倀は 5 に等しい")]
... [(> 倀 5) (print "倀は 5 より倧きい")]
... [True (print "倀は、あるべきではないものです")]))

=> (チェック倀 6)
倀が 5 より倧きい

続ける
続ける 実行をルヌプの先頭に戻したす。 次の䟋では、
(副䜜甚1) 反埩ごずに呌び出されたす。 (副䜜甚2)ただし、呌び出されるのは
リスト内の XNUMX ぀おきの倀。

;; (side-effect1) ず (side-effect2) が関数であるず仮定し、
;; コレクションは数倀のリストです

([x コレクション] の堎合)
から
(副䜜甚1 x)
(if (% x 2)
続く
(副䜜甚2 x)))

dict-comp
dict-comp 蟞曞の䜜成に䜿甚されたす。 XNUMX ぀たたは XNUMX ぀のパラメヌタを取りたす。 最初
XNUMX ぀のパラメヌタは戻り倀 (キヌず倀のペア) を制埡するためのもので、XNUMX ぀目は
シヌケンスから項目を遞択するために䜿甚されたす。 XNUMX 番目のオプションのパラメヌタは、次の目的で䜿甚できたす。
条件匏に基づいおシヌケンス内の䞀郚の項目をフィルタヌで陀倖したす。

=> (dict-comp x (* x 2) [x (範囲 10)] (奇数? x))
{1:2、3:6、9:18、5:10、7:14}

do / 突起
do & 突起 は、それぞれの匕数を評䟡し、最埌の匕数を返すために䜿甚されたす。 戻る
最埌の匕数以倖のすべおの匕数の倀は砎棄されたす。 で䜿甚できたす ラムダ or
リストコンプ 次のいずれかの䟋に瀺すように、より耇雑なロゞックを実行したす。

䜿甚䟋:

=> (true の堎合
... (実行しおください (「副䜜甚はロックです!」ず印刷したす)
... (「はい、本圓に!」ず印刷したす)))
副䜜甚はすごい
あぁ本圓

;; (副䜜甚) がそれぞれに察しお呌び出したい関数であるず仮定したす。
;; リスト内のすべおの倀ですが、その戻り倀は気にしたせん
=> (list-comp (do (副䜜甚 x)
... (if (< x 5) (* 2 x)
... (* 4 x)))
... (x (範囲 10)))
[0、2、4、6、8、20、24、28、32、36]

do 1 から n たでの任意の数の匕数を受け入れるこずができたす。

def / セット
def & セット 倀、オブゞェクト、たたは関数をシンボルにバむンドするために䜿甚されたす。 䟋えば

=> (デフォルト名 ["アリス" "ボブ" "チャヌリヌ"])
=> (名前を印刷)
[u'アリス'、u'ボブ'、u'チャヌリヌ']

=> (setv counter (fn [コレクション項目] (.count コレクション項目)))
=> (カりンタヌ [1 2 3 4 5 2 3] 2)
2

デフクラス
新しいクラスは次のように宣蚀されたす デフクラス。 XNUMX ぀のオプションのパラメヌタを取るこずができたす: ベクトル
可胜なスヌパヌクラスず、新しいクラスの属性を含む別のベクトルを定矩したす。
クラスを XNUMX ぀の項目ベクトルずしお扱いたす。

(defclass クラス名 [スヌパヌクラス-1 スヌパヌクラス-2]
[[属性倀]])

以䞋の䟋に瀺すように、倀ず関数の䞡方を新しいクラスにバむンドできたす。

=> (defclass Cat []
... [[幎霢なし]
... [カラヌ「ホワむト」]
... [話す (fn [self] (print "ニャヌ"))]])

=> (デフォルトスポット(猫))
=> (setv Spot.colour "ブラック")
'黒'
=> (.スピヌクスポット)
ニャヌ

定矩 / デファン
定矩 & デファン マクロは関数を定矩するために䜿甚されたす。 これらは XNUMX ぀のパラメヌタを取りたす。 名
定矩する関数のベクトル、 パラメヌタ、 そしおその ボディ 関数の:

(定矩名 [パラメヌタ] 本䜓)

パラメヌタの前に次のキヌワヌドを付けるこずができたす。

オプション(&オプション)
パラメヌタはオプションです。 パラメヌタは XNUMX ぀の項目リストずしお指定できたす。
最初の芁玠はパラメヌタ名で、XNUMX 番目の芁玠はデフォルト倀です。 パラメヌタ
単䞀の項目ずしお指定するこずもできたす。その堎合のデフォルト倀は次のずおりです。 なし.

=> (defn 合蚈倀 [倀 &オプション [付加䟡倀皎 10]]
... (+ (/ (* 付加䟡倀皎額) 100) 倀))

=> (合蚈倀100)
110.0

=> (合蚈倀 100 1)
101.0

鍵

クワヌグス(&K)
パラメヌタには 0 個以䞊のキヌワヌド匕数が含たれたす。

次のコヌド䟋では、すべおのキヌワヌドを出力する関数を定矩しおいたす。
匕数ずその倀。

=> (defn print-parameters [&kwargs kwargs]
... (for [(, kv) (.items kwargs)] (print kv)))

=> (印刷パラメヌタを適甚 [] {"パラメヌタ-1" 1 "パラメヌタ-2" 2})
パラメヌタ-2 2
パラメヌタ-1 1

䌑み パラメヌタには 0 個以䞊の䜍眮匕数が含たれたす。 他にポゞションはありたせん
この匕数の埌に匕数を指定できたす。

次のコヌド䟋では、0  n の数倀を䞎えるこずができる関数を定矩しおいたす。
パラメヌタヌ。 次に、すべおの奇数を合蚈し、すべおの偶数を枛算したす。

=> (defn ゞグザグサム [&残りの数字]
(let [[奇数 (list-comp x [x 数倀] (奇数? x))]
[偶数 (list-comp x [x 数倀] (偶数? x))]]
(- (奇数の合蚈) (偶数の合蚈))))

=> (ゞグザグサム)
0
=> (ゞグザグ和 3 9 4)
8
=> (ゞグザグ和 1 2 3 4 5 6)
-3

定矩゚むリアス / デファン゚むリアス
バヌゞョン 0.10.0 の新機胜。

  定矩゚むリアス & デファン゚むリアス マクロはよく䌌おいたす 定矩、ずいう区別付きで、
単䞀の名前で関数を定矩する代わりに、゚むリアスを定矩するこずもできたす。 他の
最初のパラメヌタずしお関数名のシンボルのリストを取埗するのではなく、 定矩゚むリアス &
デファン゚むリアス ず違いはありたせん 定矩 & デファン.

=> (defn-alias [メむン名の゚むリアス] []
... (「こんにちは!」ず印刷))
=> (メむン名)
"こんにちは"
=> (゚むリアス)
"こんにちは"

定矩する
バヌゞョン 0.10.1 の新機胜。

  定矩する マクロは、すぐに呌び出される main 関数を定矩したす。 sys.argv as
このファむルがスクリプトずしお実行されおいる堎合に限り、匕数を指定したす。 ぀たり、これは次のずおりです。

(defmain [&rest args]
(匕数で䜕かをする))

は以䞋ず同等です:

def main(*args):
do_something_with(args)
0を返す

__name__ == "__main__"の堎合:
むンポヌトシステム
retval = main(*sys.arg)

if isinstance(retval, int):
sys.exit(retval)

䞊でわかるように、この関数から敎数を返す堎合、これは次のようになりたす。
スクリプトの終了ステヌタスずしお䜿甚されたす。 (そうでない堎合、Python はデフォルトでステヌタス 0 を終了したす。
぀たり、すべおが倧䞈倫です)

以来 (sys.exit 0) から非敎数が返された堎合には明瀺的に実行されたせん。
定矩する、ず眮くず良いでしょう。 (デフォルト) ファむルの最埌のコヌドずしお。)

デフマクロ
デフマクロ マクロを定矩するために䜿甚されたす。 䞀般的な圢匏は次のずおりです (デフマクロ 名 [パラメヌタヌ]
expr.

次の䟋では、コヌド内の芁玠の順序を亀換するために䜿甚できるマクロを定矩したす。
ナヌザヌが䞭眮蚘法でコヌドを蚘述できるようにしたす。挔算子は
オペランド。

=> (defmacro infix [コヌド]
... (準匕甚 (
... (匕甚笊を倖したす (コヌド 1 を取埗))
... (匕甚笊を倖したす (コヌド 0 を取埗))
... (匕甚笊を倖したす (コヌド 2 を取埗))))

=> (䞭眮 (1 + 1))
2

defmacro ゚むリアス
defmacro ゚むリアス 耇数の名前 (゚むリアス) を持぀マクロを定矩するために䜿甚されたす。 䞀般的な圢匏
is (defmacro-alias [名前] [パラメヌタヌ] expr。 同じ内容で耇数のマクロを䜜成したす
指定された名前のリストの䞋にあるパラメヌタヌのリストず本䜓。

次の䟋では XNUMX ぀のマクロを定矩しおおり、どちらのマクロでもナヌザヌはコヌドを蚘述できたす。
䞭眮蚘法。

=> (defmacro-alias [infix infi] [コヌド]
... (準匕甚 (
... (匕甚笊を倖したす (コヌド 1 を取埗))
... (匕甚笊を倖したす (コヌド 0 を取埗))
... (匕甚笊を倖したす (コヌド 2 を取埗))))

=> (䞭眮 (1 + 1))
2
=> (infi (1 + 1))
2

デフマクロ/g!
バヌゞョン 0.9.12 の新機胜。

デフマクロ/g! の特別バヌゞョンです デフマクロ 自動的に生成するために䜿甚されたす ゲンシム
で始たる蚘号の堎合 g!.

たずえば、 が になる (gensym 「あ」.

関連項目 ALSO
セクション using-gensym

恐怖者
バヌゞョン 0.9.12 の新機胜。

恐怖者 リヌダヌ マクロを定矩し、構文を再構築たたは倉曎できるようにしたす。

=> (defreader ^ [expr] (print expr))
=> #^(1 2 3 4)
1 2 3 4
=> #^「こんにちは」
"こんにちは"

関連項目 ALSO
セクションリヌダヌマクロ

むンクルヌド
バヌゞョン 0.9.12 の新機胜。

むンクルヌド 珟圚の名前空間からオブゞェクトを削陀したす。

=> (setv foo 42)
=> (デルフヌ)
=> ふヌ
トレヌスバック最埌の最埌の呌び出し
ファむル " "、1行目、
NameError: 名前「foo」が定矩されおいたせん

むンクルヌド マッピングやリストなどからオブゞェクトを削陀するこずもできたす。

=> (setv テスト (リスト (範囲 10)))
=> テスト
[0、1、2、3、4、5、6、7、8、9]
=> (del (スラむス テスト 2 4)) ;; 陀倖項目 2  4 から項目を削陀したす
=> テスト
[0、1、4、5、6、7、8、9]
=> (setv dic {"foo" "bar"})
=>ディック
{"foo": "バヌ"}
=> (del (get dic "foo"))
=>ディック
{}

どず
バヌゞョン 0.10.1 の新機胜。

どず オブゞェクトぞの䞀連のメ゜ッド呌び出しを簡玠化するために䜿甚されたす。

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

=> (setv コレクション [])
=> (.append コレクション 1)
=> (.append コレクション 2)
=> (.reverse コレクション)
=> コレクション
[2 1]

評䟡する
評䟡する 匕甚笊で囲たれた匏を評䟡し、倀を返したす。

=> (eval '(print "Hello World"))
"こんにちは䞖界"

評䟡しおコンパむルする
コンパむル時の評䟡
最初の / 自動車
最初の & 自動車 コレクションの最初の芁玠にアクセスするためのマクロです。

=> (最初 (範囲 10))
0

for
for リストたたはベクトル内の各芁玠の関数を呌び出すために䜿甚されたす。 それぞれの結果
コヌルは砎棄され、 for 匏は戻りたす なし その代わり。 サンプルコヌドは反埩したす
が コレクション そしおそれぞれのために 玠子 in コレクション その 副䜜甚 ず機胜する
玠子 その匕数ずしお:

;; (副䜜甚) が単䞀のパラメヌタを取る関数であるず仮定したす。
([芁玠コレクション] (副䜜甚芁玠) の堎合)

;; for にはオプションの else ブロックを含めるこずができたす
([芁玠コレクション] の堎合 (副䜜甚芁玠)
(else (副䜜甚-2)))

オプション ほかに ブロックは、次の堎合にのみ実行されたす。 for ルヌプは正垞に終了したす。 もし
実行は次のように停止されたす ç Žã‚‹ ほかに ブロックは実行されたせん。

=> (for [芁玠 [1 2 3]] (if (< 芁玠 3)
... (印刷芁玠)
... 壊す
... (else ("ルヌプが終了したした" を出力)))
1
2

=> (for [芁玠 [1 2 3]] (if (< 芁玠 4)
... (印刷芁玠)
... 壊す
... (else ("ルヌプが終了したした" を出力)))
1
2
3
ルヌプが終了したした

ゞェネクスパヌ
ゞェネクスパヌ ゞェネレヌタ匏を䜜成するために䜿甚されたす。 XNUMX ぀たたは XNUMX ぀のパラメヌタを取りたす。 の
最初のパラメヌタは戻り倀を制埡する匏であり、XNUMX 番目のパラメヌタは䜿甚されたす。
リストから項目を遞択したす。 XNUMX 番目のオプションのパラメヌタは、フィルタリングで陀倖するために䜿甚できたす。
リスト内の䞀郚の項目は条件匏に基づいおいたす。 ゞェネクスパヌ に䌌おいたす
リストコンプただし、倀を XNUMX ぀ず぀評䟡する反埩可胜オブゞェクトを返す点が異なりたす。
すぐに評䟡したす。

=> (def コレクション (範囲 10))
=> (def フィルタヌ枈み (genexpr x [x コレクション] (even? x)))
=> (フィルタリングされたリスト)
[0、2、4、6、8]

ゲンシム
バヌゞョン 0.9.12 の新機胜。

ゲンシム を䜿甚せずにマクロを蚘述できるようにする固有のシンボルを生成するために䜿甚されたす。
倉数名が偶然に衝突しおしたう。

=> (gensym)
u':G_1235'

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

関連項目 ALSO
セクション using-gensym

取埗する
取埗する リストおよび蟞曞内の単䞀芁玠にアクセスするために䜿甚されたす。 取埗する 次の XNUMX ぀のパラメヌタを取りたす。
  デヌタ 構造 ず index or キヌ アむテムの。 察応するものを返したす
蟞曞たたはリストからの倀。 䜿甚䟋:

=> (let [[動物 {"犬" "吠える" "猫" "ニャヌ"}]
... [数字 [「れロ」「䞀」「二」「䞉」]]]
... (印刷 (動物「犬」を取埗))
... (印刷 (数倀 2 を取埗)))
暹皮
2

泚意
取埗する 存圚しないキヌに察しお蟞曞が照䌚された堎合、KeyError が発生したす。

泚意
取埗する 範囲倖のむンデックスに察しおリストたたはタプルがク゚リされた堎合、IndexError が発生したす。
境界。

党䜓的な
党䜓的な シンボルをグロヌバルずしおマヌクするために䜿甚できたす。 これにより、プログラマは、
倀をグロヌバルシンボルに蚭定したす。 グロヌバル シンボルの読み取りには、 党䜓的な キヌワヌド --
代入するだけです。

次の䟋は、グロヌバル シンボルがどのように䜿甚されるかを瀺しおいたす。 a 関数内で倀が割り圓おられ、
埌で別の関数で出力されたす。 なしで 党䜓的な キヌワヌド、XNUMX 番目の関数
を投げただろう 名前゚ラヌ.

(defn set-a [倀]
(グロヌバルa)
(倀を蚭定))

(defn print-a []
(a)を印刷)

(セット-a 5)
(印刷-a)

if / ない堎合
バヌゞョン 0.10.0 の新機胜: if-not

if 実行するコヌドを条件付きで遞択するために䜿甚されたす。 条件を含める必芁がありたす
ブロックず、条件ブロックが次のように評䟡された堎合に実行されるブロック ◯。 オプションで、
条件の評䟡が次の堎合に実行される最終ブロックが含たれる堎合がありたす。
×.

ない堎合 同様ですが、条件が倱敗するず XNUMX 番目のブロックが実行されたす。
XNUMX 番目ず最埌のブロックは、テストが成功するず実行されたす。これは逆の順序です。 if.

䜿甚䟋

(if (お金が残っおいる? アカりント)
「買い物に行こう」を印刷
(「仕事に行きたしょう」ず印刷))

(そうでない堎合 (お金が残っおいる? アカりント)
(「仕事に行きたしょう」を印刷)
(「買い物に行こう」ず印刷))

Python の真実性が尊重されたす。 なし, ×、任意の数倀型のれロ、空のシヌケンス、
および空の蟞曞が考慮されたす ×; 他のすべおが考慮されたす ◯.

Lisp-if / LIF & Lisp-if-not / ラむフノット
バヌゞョン 0.10.0 の新機胜。

バヌゞョン 0.10.2 の新機胜: lisp-if-not / lif-not

より Lispy を奜む人向け if 条項、我々は持っおいたす Lisp-ifたたは LIF。 この の 考慮する
なし / れロ 嘘であるこず 他の「停っぜい」Python 倀はすべお true ずみなされたす。
逆に、私たちは Lisp-if-not & ラむフノット ず䞊行しお if & ない堎合 逆転するのは
比范。

=> (lisp-if True "true" "false")
"真"
=> (lisp-if False "true" "false")
"真"
=> (lisp-if 0 "true" "false")
"真"
=> (lisp-if nil "true" "false")
"NS"
=> (lisp-if None "true" "false")
"NS"
=> (lisp-if-not nil "true" "false")
"真"
=> (lisp-if-not None "true" "false")
"真"
=> (lisp-if-not False "true" "false")
"NS"

; 同等だが短い
=> (lif True "true" "false")
"真"
=> (lif nil "true" "false")
"NS"
=> (lif-not None "true" "false")
"真"

import
import Python のようにモゞュヌルをむンポヌトするために䜿甚されたす。 いく぀かの方法がありたす import できる
利甚される。

;; これらの各モゞュヌルをむンポヌトしたす
;;
;; パむ゜ン:
;; むンポヌトシステム
;; OS.パスをむンポヌトする
(sys os.pathをむンポヌト)

;; モゞュヌルからむンポヌトする
;;
;; Python: os.path からむンポヌトが存圚したす、isdir、isfile
(むンポヌト [os.path [isists isdir isfile]])

;; ゚むリアスを䜿甚しおむンポヌトする
;;
;; Python: sys を systest ずしおむンポヌトしたす
(むンポヌト [sys :as systest])

;; さたざたなタむプのむンポヌトを奜きなだけリストできたす。
(むンポヌト [tests.resources [kwtest function-with-a-dash]]
[os.path [isdir isfile が存圚したす]]
[sys :as systest])

;; すべおのモゞュヌル関数を珟圚の名前空間にむンポヌトしたす
(むンポヌト [sys [*]])

ラムダ / fn
ラムダ & fn 無名関数を定矩するために䜿甚できたす。 パラメヌタは次のようになりたす
定矩: 最初のパラメヌタはパラメヌタのベクトルで、残りはパラメヌタの本䜓です。
機胜。 ラムダ 新しい関数を返したす。 次の䟋では、無名関数
が定矩され、出力をフィルタリングするために別の関数に枡されたす。

=> (def people [{:name "アリス" :幎霢 20}
... {:名前「ボブ」:幎霢 25}
... {:名前「チャヌリヌ」:50æ­³}
... {:名前 "デむブ" :5 æ­³}])

=> (defn display-people [人物フィルタヌ]
... (for [person people] (if (filter person) (print (:name person))))

=> (衚瀺-人 人 (fn [人] (< (:幎霢の人) 25)))
アリス
デむブ

通垞の関数定矩ず同様に、本䜓の最初の芁玠が文字列の堎合、
docstring ずしお機胜したす。 これは、クラス メ゜ッドに docstring を䞎える堎合に䟿利です。

=> (setv の XNUMX 倍
... (fn [x]
... 「入力を XNUMX で乗算し、結果を返したす。」
... (* x 3)))

これは Python の組み蟌み関数で確認できたす。 助けたす 関数

=> (ヘルプ×XNUMX)
関数 times_three のヘルプ:

回_侉(x)
入力を XNUMX で乗算し、結果を返したす
終わり

last
バヌゞョン 0.10.2 の新機胜。

last コレクションの最埌の芁玠にアクセスするために䜿甚できたす。

=> (最埌 [2 4 6])
6

う
う 字句スコヌプの倉数を䜜成するために䜿甚されたす。 それらは最初に䜜成されたす。
う 圢成され、圢成された埌は存圚しなくなりたす。 次の䟋はこれを瀺しおいたす
行動

=> (let [[x 5]] (x を出力)
... ([[x 6]] にしおみたす (x を出力したす))
... (x)を印刷)
5
6
5

  う マクロは XNUMX ぀のパラメヌタを取りたす: ベクトルを定矩する variables ず ボディ どれが埗たすか
実行されたした。 variables 各芁玠が単䞀の倉数たたはベクトルであるベクトルです。
倉数倀のペアを定矩したす。 単䞀倉数の堎合、倀が代入されたす。
なし; それ以倖の堎合は、指定された倀が䜿甚されたす。

=> (let [x [y 5]] (xy を出力))
なし5

リストコンプ
リストコンプ リスト内包衚蚘を実行したす。 XNUMX ぀たたは XNUMX ぀のパラメヌタを取りたす。 最初
パラメヌタは戻り倀を制埡する匏であり、XNUMX 番目のパラメヌタは次の目的で䜿甚されたす。
リストから項目を遞択したす。 XNUMX 番目のオプションのパラメヌタヌは、䞀郚のフィルタヌを陀倖するために䜿甚できたす。
条件匏に基づいおリスト内の項目の数を決定したす。 いく぀かの䟋

=> (def コレクション (範囲 10))
=> (リスト-コンプ x [x コレクション])
[0、1、2、3、4、5、6、7、8、9]

=> (リスト-comp (* x 2) [x コレクション])
[0、2、4、6、8、10、12、14、16、18]

=> (リスト-comp (* x 2) [x コレクション] (< x 5))
[0、2、4、6、8]


論理匏で䜿甚されたす。 単䞀のパラメヌタを受け取り、反転した倀を返したす。
真理倀。 もしも ◯ パラメヌタずしお䞎えられる、 × が返されたすし、その逆も同様です。
䜿甚䟋

=> (真実ではありたせん)
×

=> (停ではない)
◯

=> (なしではありたせん)
◯

or
or 論理匏で䜿甚されたす。 少なくずも XNUMX ぀のパラメヌタが必芁です。 返されたす
最初の非 false パラメヌタ。 そのような倀が存圚しない堎合は、最埌のパラメヌタが返されたす。

=> (たたは真停)
◯

=> (そしお停停)
×

=> (および停 1 真停)
1

泚意
or 最初の真の倀が怜出されるずすぐに、パラメヌタヌの評䟡をショヌトしお停止したす。
遭遇した。

=> (たたは True ("hello" を出力))
◯

印刷
印刷 画面䞊に出力するために䜿甚されたす。 䜿甚䟋:

(「Hello world!」を印刷)

泚意
印刷 垞に戻りたす なし.

準匕甚
準匕甚 フォヌムを匕甚できるだけでなく、匏を遞択的に評䟡するこずもできたす。
内の匏 準匕甚 を䜿甚しお遞択的に評䟡できたす 匕甚終わり (~。 ザ
評䟡されたフォヌムは、次を䜿甚しお接合するこずもできたす。 匕甚笊を倖しおスプラむスする (~@。 準匕甚も可胜です
逆匕甚笊を䜿甚しお蚘述されたす (`シンボル。

;; `qux' を倀を持぀倉数にしたす (bar baz)
`(ふぉ~ククス)
; '(foo (bar baz)) ず同等
`(foo ~@qux)
; '(foo bar baz) ず同等

率
率 枡されたフォヌムを評䟡せずに返したす。 率 あるいは、
アポストロフィヌ ('シンボル。

=> (setv x '(print "Hello World"))
; 倉数 x は匏に蚭定されおいたすが、評䟡されおいたせん
=> ×
(u'print' u'Hello World')
=> (評䟡 x)
こんにちは䞖界

必芁ずする
必芁ずする 特定のモゞュヌルからマクロをむンポヌトするために䜿甚されたす。 少なくずも XNUMX ぀のパラメヌタが必芁です
どのマクロをむンポヌトする必芁があるモゞュヌルを指定したす。 耇数のモゞュヌルをむンポヌト可胜
シングルで 必芁ずする.

次の䟋では、マクロをむンポヌトしたす。 モゞュヌル1 & モゞュヌル2:

(モゞュヌル-1 モゞュヌル-2 が必芁)

残り / cdr
残り & cdr 最初の芁玠なしで匕数ずしお枡されたコレクションを返したす。

=> (残り(範囲10))
[1、2、3、4、5、6、7、8、9]

セットコンプ
セットコンプ セットを䜜成するために䜿甚されたす。 XNUMX ぀たたは XNUMX ぀のパラメヌタを取りたす。 最初のパラメヌタは
XNUMX 番目は戻り倀を制埡するために䜿甚され、XNUMX 番目は項目から項目を遞択するために䜿甚されたす。
順序。 XNUMX 番目のオプションのパラメヌタは、次の項目の䞀郚をフィルタリングするために䜿甚できたす。
条件匏に基づくシヌケンス。

=> (setv デヌタ [1 2 3 4 5 2 3 4 5 3 4 5])
=> (set-comp x [x デヌタ] (奇数? x))
{1、3、5}

スラむス
スラむス リストのサブセットを取埗し、そこから新しいリストを䜜成するために䜿甚できたす。 フォヌム
スラむスするリストを指定するパラメヌタを少なくずも XNUMX ぀受け取りたす。 XNUMX ぀のオプションのパラメヌタを指定できたす。
サブセットの開始䜍眮ず終了䜍眮を䞎えるために䜿甚されたす。 これらが䟛絊されおいない堎合、
のデフォルト倀 なし 代わりに䜿甚されたす。 XNUMX 番目のオプションのパラメヌタは次の目的で䜿甚されたす。
芁玠間のステップを制埡したす。

スラむス Python の察応物ず同じルヌルに埓いたす。 負のむンデックスもカりントされたす
リストの最埌から始めたす。 䜿甚䟋:

=> (def コレクション (範囲 10))

=> (スラむスコレクション)
[0、1、2、3、4、5、6、7、8、9]

=> (スラむスコレクション 5)
[5、6、7、8、9]

=> (スラむスコレクション 2 8)
[2、3、4、5、6、7]

=> (スラむスコレクション 2 8 2)
[2、4、6]

=> (スラむスコレクション -4 -2)
[6、7]

投げる / 䞊げる
  投げる or 䞊げる フォヌムを䜿甚しお、 䟋倖 実行時。 䜿甚䟋:

投げる
; 最埌の䟋倖を再発生させたす

(IOError をスロヌ)
; IOError をスロヌする

(スロヌ (IOError "foobar"))
; IOError("foobar") をスロヌする

投げる 単䞀の匕数 ( 䟋倖 クラスたたはむンスタンス)、たたは匕数がない堎合
最埌をリレむズする 䟋倖.

詊したす
  詊したす フォヌムは開始するために䜿甚されたす 詊したす / キャッチ ブロック。 フォヌムは次のように䜿甚されたす。

(やっおみお
(゚ラヌが発生しやすい関数)
(catch [e ZeroDivisionError] (print "れロ陀算"))
(else (「゚ラヌなし」を出力))
(最埌に (「すべお完了」ず出力)))

詊したす 少なくずもXNUMX぀含たれおいる必芁がありたす キャッチ ブロックであり、オプションで ほかに or 最埌に
ブロック。 の実行䞭に䞀臎する catch ブロックで゚ラヌが発生した堎合
゚ラヌが発生しやすい関数、その キャッチ ブロックが実行されたす。 ゚ラヌが発生しない堎合、 ほかに
ブロックが実行されたす。 の 最埌に ブロックは、実行されるかどうかに関係なく、最埌に実行されたす。
゚ラヌが発生したした。

ない限り、
  ない限り、 マクロは、 if 指定されたかどうかをチェックするステヌトメント
条件付きです ×。 このマクロの展開を以䞋に瀺したす。

(条件文を陀く)

(条件付きの堎合
なし
(do ステヌトメント))

匕甚終わり
準匕甚笊で囲たれた圢匏内では、 匕甚終わり シンボルの評䟡を匷制したす。 匕甚終わり ゚むリアスは
チルダ (~シンボル。

(デフォルト名は「抱擁」)
(quasiquote (= name (unquote name)))
;=> (u'=' u'name' u'抱っこ')

`(= 名前 ~名前)
;=> (u'=' u'name' u'抱っこ')

匕甚笊を倖しおスプラむスする
匕甚笊を倖しおスプラむスする のように、準匕甚笊で囲たれた圢匏内のシンボルの評䟡を匷制したす。
匕甚終わり. 匕甚笊を倖しおスプラむスする 匕甚笊で囲たれおいないシンボルに
反埩可胜な倀。反埩可胜な倀を準匕甚笊で囲たれた圢匏に「結合」したす。 匕甚笊を倖しおスプラむスする is
別名 ~@ シンボル。

(def nums [1 2 3 4])
(quasiquote (+ (unquote-splice nums)))
;=> (u'+' 1L 2L 3L 4L)

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

い぀
い぀ に䌌おいたす ない限り、ただし、指定された条件が次の堎合にテストするこずを陀きたす。 ◯。 そうではない
持぀こずが可胜 ほかに でブロック い぀ 倧きい。 以䞋に展開を瀺したす。
マクロ。

(条件文の堎合)

(if 条件付き (do ステヌトメント))

while
while 条件が満たされる限り、XNUMX ぀以䞊のブロックを実行するために䜿甚されたす。 次の
䟋では、「Hello world!」が出力されたす。 無限に画面に衚瀺されたす:

(True の堎合 (「Hello world!」を出力))

 
  コンテキスト マネヌゞャヌ内でブロックの実行をラップするために䜿甚されたす。 コンテキスト
その埌、管理者はロヌカル システムをセットアップし、制埡された方法でそれを砎棄できたす。 の
兞型的な䜿甚䟋   ファむルを凊理するずきです。   コンテキストを
匕数を指定するか、以䞋に瀺すように完党に無芖したす。

([[arg (expr)]] ブロックを䜿甚)

([[(expr)]] ブロックあり)

([[arg (expr)] [(expr)]] ブロックを䜿甚)

次の䟋では、 NEWS ファむルを開き、その内容を画面に出力したす。 の
ファむルは凊理埌に自動的に閉じられたす。

(with [[f (open "NEWS")]] (print (.read f)))

デコレヌタ付き
デコレヌタ付き 関数を別の関数でラップするために䜿甚されたす。 を実行する関数
装食は単䞀の倀、぀たり装食される関数を受け入れ、新しい倀を返す必芁がありたす。
機胜。 デコレヌタ付き 少なくずも XNUMX ぀のパラメヌタを取りたす: 実行する関数
装食ず装食される機胜。 耇数のデコレヌタ関数を䜿甚できたす
適甚枈み; それらは、最も倖偎から最も内偎に向かっお順番に適甚されたす。 最初
デコレヌタは最も倖偎のデコレヌタになりたす。 匕数を持぀デコレヌタは単に呌び出されたす
関数呌び出しのようなもの。

(デコレヌタ付きデコレヌタ-楜しい
(defn some-function [] ...)

(デコレヌタ付き デコレヌタ1 デコレヌタ2 ...
(defn some-function [] ...)

(with-decorator (decorator arg) ..
(defn some-function [] ...)

次の䟋では、 デコレヌタヌ株匏䌚瀟 関数を装食するために䜿甚されたす 添加 たた、
XNUMX ぀のパラメヌタを受け取り、次の倀を䜿甚しお装食された関数を呌び出す関数。
1 ず぀増加したす。 添加 倀 1 および 1 で呌び出され、終了
結果は 4 になりたす (1 + 1 + 1 + 1).

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

=> (with-decorator inc-decorator (defn 加算 [ab] (+ ab)))
=> (远加 1 1)
4
=> (with-decorator inc2-decorator inc-decorator
... (定矩加算 [ab] (+ ab)))
=> (远加 1 1)
8

ずgensyms
バヌゞョン 0.9.12 の新機胜。

ずgensym のセットを生成するために䜿甚されたす ゲンシム マクロで䜿甚したす。 次のコヌド:

(gensonyms [abc] 付き)
...

次のように展開されたす:

([[a (gensym)
[b (gensym)
[c (gensym)]]
...

関連項目 ALSO
セクション using-gensym

産出
産出 XNUMX ぀以䞊の倀を返すゞェネレヌタヌ オブゞェクトを䜜成するために䜿甚されたす。 発電機
反埩可胜であるため、ルヌプ、リスト内包衚蚘などで䜿甚できたす。
構成したす。

関数 乱数 ゞェネレヌタヌを䜿甚しお無限玚数を生成する方法を瀺したす
無限のメモリを消費するこずなく。

=> (defn 乗算 [基本係数]
... (for [[(, ベヌス係数) (zip ベヌス係数)]]
... (収量 (* 基本係数))))

=> (乗算 (範囲 5) (範囲 5))


=> (リスト-挔算倀 [倀 (乗算 (範囲 10) (範囲 10))])
[0、1、4、9、16、25、36、49、64、81]

=> (ランダムにむンポヌト)
=> (定矩 乱数 [䜎 高]
... (while True (yield (.randint ランダム䜎高))))
=> (list-comp x [x (take 15 (random-numbers 1 50))])])
[7、41、6、22、32、17、5、38、18、38、17、14、23、23、19]

利回りから
バヌゞョン 0.9.13 の新機胜。

パむ゜ン 3.3 そしお UP ONLY

利回りから サブゞェネレヌタヌを呌び出すために䜿甚されたす。 これは、コルヌチンを次のようにしたい堎合に䟿利です。
たずえば、次のような掟手なものを䜿甚する堎合、そのプロセスを別のコルヌチンに委任できたす。
非同期.

Hy 基本
基本 機胜
最埌に
䜿甚法 (でも最埌に コル

最埌の項目を陀くすべおの項目のむテレヌタを返したす。 コル.

=> (リスト (最埌 (範囲 10)))
[0、1、2、3、4、5、6、7、8]

=> (リスト (最埌 [1]))
[]

=> (リスト (最埌たで []))
[]

=> (itertools をむンポヌト)
=> (リスト (take 5 (butlast (itertools.count 10))))
[10、11、12、13、14]

コル
バヌゞョン 0.10.0 の新機胜。

䜿甚法 コル x)

返品 ◯ if x 反埩可胜であり、文字列ではありたせん。

=> (収集? [1 2 3 4])
◯

=> (coll? {"a" 1 "b" 2})
◯

=> (コレ? "abc")
×

短所
バヌゞョン 0.10.0 の新機胜。

䜿甚法 (短所 a b)

car を含む新しい cons セルを返したす a ずcdr b.

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

=> (= 'hd (車 a))
◯

=> (= 'tl (cdr a))
◯

短所
バヌゞョン 0.10.0 の新機胜。

䜿甚法 短所 ふヌ

かどうかを確認したす foo はコンセルです。

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

=> (短所? a)
◯

=> (短所?なし)
×

=> (短所? [1 2 3])
×

12月
䜿甚法 (XNUMX月 x)

XNUMX ぀小さい倀を返したす x。 に盞圓 (- x 1)。 レむズ タむプ゚ラヌ if 䌚員登録はお枈みでしょうか 数字 バツ.

=> (3月XNUMX日)
2

=> (0月XNUMX日)
-1

=> (12.3月XNUMX日)
11.3

分解する
バヌゞョン 0.10.0 の新機胜。

䜿甚法 (分解する ツリヌ オプション(&オプション) [コヌドゞェン 間違い]

指定された Hy の Python AST をダンプしたす。 ツリヌ 暙準出力に。 もし コヌド生成 is ◯、 関数
代わりに Python コヌドを出力したす。

=> (逆アセンブル '(print "Hello World!"))
モゞュヌル(
本文=[
Expr(value=Call(func=Name(id='print'), args=[Str(s='Hello World!')], キヌワヌド=[], starargs=None, kwargs=None))])

=> (逆アセンブル '(print "Hello World!") true)
print('Hello World!')

空
䜿甚法 空の コル

返品 ◯ if コル 空です。 に盞圓 (= 0 (レン 集めおください.

=> (空? [])
◯

=> (空ですか? "")
◯

=> (空? (, 1 2))
×

毎
バヌゞョン 0.10.0 の新機胜。

䜿甚法 毎 捕食 コル

返品 ◯ if (プレド x) は論理的に真です x in コル、そうでなければ ×。 戻る ◯
if コル 空です。

=> (毎?偶数?[2 4 6])
◯

=> (毎?偶数?[1 3 5])
×

=> (毎?偶数?[2 4 5])
×

=> (毎?均等? [])
◯

浮く
䜿甚法 浮く x)

返品 ◯ if x フロヌトです。

=> (浮動小数点? 3.2)
◯

=> (浮動小数点? -2)
×

平
䜿甚法 平 x)

返品 ◯ if x は均等です。 レむズ タむプ゚ラヌ if 䌚員登録はお枈みでしょうか 数字 バツ.

=> (偶数? 2)
◯

=> (偶数? 13)
×

=> (偶数? 0)
◯

アむデンティティ
䜿甚法 身元 x)

関数に指定された匕数を返したす。

=> (アむデンティティ 4)
4

=> (リスト (マップ ID [1 2 3 4]))
[1 2 3 4]

株匏䌚瀟
䜿甚法 (含む x)

より XNUMX ぀倚い倀を返したす x。 に盞圓 (+ x 1)。 レむズ タむプ゚ラヌ if 䌚員登録はお枈みでしょうか 数字 バツ.

=> (3 を含む)
4

=> (0 を含む)
1

=> (12.3 を含む)
13.3

むンスタンス
䜿甚法 実䟋 class x)

返品 ◯ if x のむンスタンスです class.

=> (むンスタンス? float 1.0)
◯

=> (むンスタンス? int 7)
◯

=> (むンスタンス? str (str "foo"))
◯

=> (defclass TestClass [オブゞェクト])
=> (setv inst (TestClass))
=> (むンスタンス? TestClass inst)
◯

敎数
䜿甚法 敎数 x)

返品 ◯ if x は敎数です。 Python 2 の堎合、これは次のいずれかです int型 or 長い。 Python 3 の堎合、
これは int型.

=> (æ•Žæ•°? 3)
◯

=> (æ•Žæ•°? -2.4)
×

間を空ける
バヌゞョン 0.10.1 の新機胜。

䜿甚法 間を空ける seq1 seq2 ...

各シヌケンスの最初の項目、次に XNUMX 番目の項目などの反埩可胜項目を返したす。

=> (リスト (むンタヌリヌブ (範囲 5) (範囲 100 105)))
[0、100、1、101、2、102、3、103、4、104]

=> (リスト (むンタヌリヌブ (範囲 1000000) "abc"))
[0、'a'、1、'b'、2、'c']

介入する
バヌゞョン 0.10.1 の新機胜。

䜿甚法 (間に挟む 項目 続く)

項目で区切られたシヌケンスの芁玠の反埩可胜倀を返したす。

=> (リスト (「!」「abcd」を挟む))
['あいうえお']

=> (リスト (-1 (範囲 5) を挿入))
[0、-1、1、-1、2、-1、3、-1、4]

反埩可胜ですか
䜿甚法 (反埩可胜? x)

返品 ◯ if x 反埩可胜です。 反埩可胜なオブゞェクトは、次の堎合に新しい反埩子を返したす。 (むタヌ x) is
ず呌ばれた。 ず察比しおください むテレヌタ?.

=> ;; 文字列に察しお機胜したす
=> (反埩可胜? (str "abcde"))
◯

=> ;; リストに察しお機胜したす
=> (反埩可胜? [1 2 3 4 5])
◯

=> ;; タプルで動䜜したす
=> (反埩可胜? (, 1 2 3))
◯

=> ;; 蟞曞で動䜜したす
=> (反埩可胜? {:a 1 :b 2 :c 3})
◯

=> ;; むテレヌタ/ゞェネレヌタで動䜜したす
=> (反埩可胜? (3 回繰り返したす))
◯

むテレヌタ?
䜿甚法 (反埩子? x)

返品 ◯ if x むテレヌタです。 むテレヌタは、それ自身を
むテレヌタのずき (むタヌ x) ず呌ばれたす。 ず察比しおください 反埩可胜ですか.

=> ;; リストでは機胜したせん
=> (反埩子? [1 2 3 4 5])
×

=> ;; ただし、リストから iter を取埗できたす
=> (反埩子? (iter [1 2 3 4 5]))
◯

=> ;; 蟞曞では機胜したせん
=> (反埩子? {:a 1 :b 2 :c 3})
×

=> ;; dictからむテレヌタを䜜成する
=> (反埩子? (反埩子 {:a 1 :b 2 :c 3}))
◯

リスト*
䜿甚法 リスト* 䌑み しっぜ

匕数を含む入れ子になった cons セルのチェヌン (点線のリスト) を生成したす。 もし
匕数リストには芁玠が XNUMX ぀しかないので、それを返したす。

=> (リスト* 1 2 3 4)
(1 2 3 . 4)

=> (リスト* 1 2 3 [4])
[1、2、3、4]

=> (リスト*1)
1

=> (短所? (リスト* 1 2 3 4))
◯

マクロ展開
バヌゞョン 0.10.0 の新機胜。

䜿甚法 (マクロ展開 圢

の完党なマクロ展開を返したす。 フォヌム.

=> (マクロ展開 '(-> (ab) (xy)))
(u'x' (u'a' u'b') u'y')

=> (マクロ展開 '(-> (ab) (-> (cd) (ef))))
(u'e' (u'c' (u'a' u'b') u'd') u'f')

マクロ゚キスパンド-1
バヌゞョン 0.10.0 の新機胜。

䜿甚法 (マクロ゚キスパンド-1 圢

次の単䞀ステップのマクロ展開を返したす。 フォヌム.

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

ず合䜵
バヌゞョン 0.10.1 の新機胜。

䜿甚法 ず合䜵 f 䌑み 地図

最初に結合された残りのマップで構成されるマップを返したす。 キヌが発生した堎合
耇数のマップがある堎合、埌者のマッピング (巊から右) が結合されたす。
呌び出しによる結果のマッピング (f 結果の倀 埌者のノァル).

=> (マヌゞりィズ (fn [xy] (+ xy)) {"a" 10 "b" 20} {"a" 1 "c" 30})
{u'a': 11L、u'c': 30L、u'b': 20L}

吊定ですか
䜿甚法 いや x)

返品 ◯ if x はれロ未満です。 レむズ タむプ゚ラヌ if 䌚員登録はお枈みでしょうか 数字 バツ.

=> (吊定? -2)
◯

=> (吊定? 3)
×

=> (吊定? 0)
×

れロ
䜿甚法 なし x)

返品 ◯ if x is れロ / なし.

=> (なし? なし)
◯

=> (なし?なし)
◯

=> (nil? 0)
×

=> (setf x nil)
=> (nil?x)
◯

=> ;; list.append は垞に None を返したす
=> (nil? (.append [1 2 3] 4))
◯

無し
䜿甚法 なし x)

返品 ◯ if x is なし.

=> (なし? なし)
◯

=> (なし? 0)
×

=> (setf x なし)
=> (なし?×)
◯

=> ;; list.append は垞に None を返したす
=> (なし? (.append [1 2 3] 4))
◯

n番目の
䜿甚法 (n番目 コル n オプション(&オプション) [ディフォルト なし])

を返したす nコレクション内の 0 番目の項目。デフォルト倀を返したす。 れロ、もし
範囲倖です別途指定がない限り。 レむズ 倀゚ラヌ if n 負です。

=> (n番目 [1 2 4 7] 1)
2

=> (n番目 [1 2 4 7] 3)
7

=> (nil? (nth [1 2 4 7] 5))
◯

=> (nth [1 2 4 7] 5 "デフォルト")
'ディフォルト'

=> (nth (take 3 (drop 2 [1 2 3 4 5 6])) 2))
5

=> (n番目 [1 2 4 7] -1)
トレヌスバック最埌の最埌の呌び出し
...
ValueError: islice() のむンデックスは None たたは敎数: 0 <= x <= sys.maxsize である必芁がありたす。

数倀的な
䜿甚法 数字 x)

返品 ◯ if x Python で定矩されおいる数倀です。 数字.数字 ずに提䟛されたす。

=> (数倀? -2)
◯

=> (数倀? 3.2)
◯

=> (数倀? "foo")
×

奇数
䜿甚法 奇数 x)

返品 ◯ if x 奇数です。 レむズ タむプ゚ラヌ if 䌚員登録はお枈みでしょうか 数字 バツ.

=> (奇数? 13)
◯

=> (奇数? 2)
×

=> (奇数? 0)
×

そうですか
䜿甚法 そうですか x)

返品 ◯ if x はれロより倧きいです。 レむズ タむプ゚ラヌ if 䌚員登録はお枈みでしょうか 数字 バツ.

=> (䜍眮? 3)
◯

=> (䜍眮? -2)
×

=> (䜍眮? 0)
×

2番目の
䜿甚法 XNUMX番 コル

の XNUMX 番目のメンバヌを返したす コル。 に盞圓 取埗する コル 1).

=> (0 番目の [1 2 XNUMX])
1

侀郹
バヌゞョン 0.10.0 の新機胜。

䜿甚法 いく぀か 捕食 コル

最初の論理的に真の倀を返したす。 (プレド x) いずれかの x in コル、そうでなければ れロ.
返品 れロ if コル 空です。

=> (䞀郚は偶数ですか? [2 4 6])
◯

=> (nil? (偶数もある? [1 3 5]))
◯

=> (nil? (䜕らかのアむデンティティ [0 "" []]))
◯

=> (䜕らかのアむデンティティ [0 "空でない文字列" []])
'空でない文字列'

=> (nil? (堎合によっおは? []))
◯

ストリング
䜿甚法 匊 x)

返品 ◯ if x 文字列です。

=> (文字列? "foo")
◯

=> (文字列? -2)
×

シンボル
䜿甚法 シンボル x)

返品 ◯ if x は蚘号です。

=> (シンボル? 'foo)
◯

=> (蚘号? '[abc])
×

零
䜿甚法 れロ x)

返品 ◯ if x れロです。

=> (れロ? 3)
×

=> (れロ? -2)
×

=> (れロ? 0)
◯

シヌケンス 機胜
シヌケンス関数は、朜圚的に無限のシヌケンスを䜜成したり操䜜したりできたす。
シヌケンスがリストたたは同様のコンテナ内で完党に実珟される必芁がありたす。 圌らはこれを次のようにしお行いたす
Python むテレヌタを返したす。

䜿甚方法の䟋ずしお、正準無限フィボナッチ数ゞェネレヌタヌを䜿甚できたす。
これらの機胜の䞀郚。

(定矩 fib []
(セットTV a 0)
(セットテレビ b 1)
(本圓ですが
(収量a)
(setv (, ab) (, b (+ ab))))

泚意しおください (その間 true ... ルヌプ。 これを REPL で実行するず、

=> (フィブ)


関数を呌び出すずむテレヌタが返されるだけですが、それを䜿甚するたでは機胜したせん。
このようなこずを詊みるこずは、無限ルヌプが実行されるたで実行されるため、お勧めできたせん。
利甚可胜な RAM をすべお消費するか、この堎合は匷制終了するたで消費したす。

=> (リスト(fib))
[1] 91474 人が死亡

最初の 10 個のフィボナッチ数を取埗するには、次を䜿甚したす。 取る。 ご了承ください 取る ゞェネレヌタヌも返したす。
それでそこからリストを䜜成したす。

=> (リスト (テむク 10 (fib)))
[0、1、1、2、3、5、8、13、21、34]

むンデックス 9 のフィボナッチ数を取埗するには (0 から開始):

=> (n番目(fib) 9)
34

サむクル
䜿甚法 サむクル コル

coll のメンバヌの無限むテレヌタを返したす。

=> (リスト (テむク 7 (サむクル [1 2 3])))
[1、2、3、1、2、3、1]

=> (リスト (テむク 2 (サむクル [1 2 3])))
[1、2]

明確な
䜿甚法 明確な コル

䞀意のメンバヌのみを含むむテレヌタを返したす。 コル.

=> (リスト (distinct [ 1 2 3 4 3 5 2 ]))
[1、2、3、4、5]

=> (リスト (個別の []))
[]

=> (リスト (distinct (iter [ 1 2 3 4 3 5 2 ])))
[1、2、3、4、5]

ドロップ
䜿甚法 萜ずす n コル

最初のむテレヌタをスキップしおむテレヌタを返したす。 n のメンバヌ コル。 レむズ 倀゚ラヌ if n is
負。

=> (リスト (ドロップ 2 [1 2 3 4 5]))
[3、4、5]

=> (リスト (ドロップ 4 [1 2 3 4 5]))
【5]

=> (リスト (ドロップ 0 [1 2 3 4 5]))
[1、2、3、4、5]

=> (リスト (ドロップ 6 [1 2 3 4 5]))
[]

ドロップラスト
䜿甚法 (ドロップラスト n コル

最埌を陀くすべおの反埩子を返したす。 n のアむテム コル。 レむズ 倀゚ラヌ if n is
負。

=> (リスト (最埌の 5 をドロップ (範囲 10 20)))
[10、11、12、13、14]

=> (リスト (ドロップ-最埌の 0 (範囲 5)))
[0、1、2、3、4]

=> (リスト (ドロップ-最埌の 100 (範囲 100)))
[]

=> (itertools をむンポヌト)
=> (リスト (take 5 (drop-last 100 (itertools.count 10))))
[10、11、12、13、14]

ドロップしながら
䜿甚法 (ドロップしながら 捕食 コル

のメンバヌをスキップしおむテレヌタを返したす。 コル たで 捕食 is ×.

=> (リスト (偶数ドロップ䞭? [2 4 7 8 9]))
[7、8、9]

=> (list (drop-while numeric? [1 2 3 None "a"])))
[䜕もない、うわヌ]

=> (リスト (ドロップ䞭の䜍眮? [2 4 7 8 9]))
[]

filter
䜿甚法 フィルタヌ 捕食 コル

内のすべおの項目のむテレヌタを返したす。 コル 述語を枡すもの 捕食.

参照 削陀したす.

=> (リスト (フィルタヌ䜍眮? [1 2 3 -4 5 -7]))
[1、2、3、5]

=> (リスト (フィルタ偶数? [1 2 3 -4 5 -7]))
[2、-4]

平らにする
バヌゞョン 0.9.12 の新機胜。

䜿甚法 (平らにする コル

すべおの項目の単䞀のリストを返したす。 コル含たれるすべおのリストを平坊化するこずによっお、および/たたは
タプル。

=> (平坊化 [1 2 [3 4] 5])
[1、2、3、4、5]

=> (平坊化 ["foo" (, 1 2) [1 [2 3] 4] "bar"])
['foo', 1, 2, 1, 2, 3, 4, 'bar']

反埩する
䜿甚法 (反埩 fn x)

次のむテレヌタを返したす。 x, fn(x), fn(fn(x)), etc.

=> (リスト (take 5 (iterate inc 5)))
[5、6、7、8、9]

=> (リスト (take 5 (iterate (fn [x] (* xx)) 5)))
[5、25、625、390625、152587890625]

read
䜿甚法 読む オプション(&オプション) [ファむルから [eof])

次の Hy 匏を読み取りたす。 ファむルから (デフォルトでは システム暙準入力、を取埗できたす
EOF ずしお単䞀バむト (デフォルトは空の文字列)。 レむズ EOF゚ラヌ if ファむルから 前に終わる
完党な匏を解析できたす。

=> (読む)
(+2 2)
('+' 2 2)
=> (評䟡(読み取り))
(+2 2)
4

=> (むンポヌトIO)
=> (def バッファ (io.StringIO "(+ 2 2)\n(- 2 1)"))
=> (eval (apply read [] {"from_file" バッファ}))
4
=> (eval (apply read [] {"from_file" バッファ}))
1

=> ; 「example.hy」に次の内容が含たれおいるず仮定したす。
=> ; (「こんにちは」を印刷)
=> ; (「ハむフレンズ!」ず印刷しおください)
=> (with [[f (open "example.hy")]]
... 詊す
... (本圓ですが
... (let [[exp (read f)]]
... する
... (「OHY」expを印刷)
... (評䟡匏))))
... (キャッチ [e EOFError]
... (「EOF!」を印刷))))
OHY (「印刷」「こんにちは」)
こんにちは
OHY (「印刷」「ハむフレンズ!」)
ハむフレンズ
終了!

削陀したす
䜿甚法 取り陀く 捕食 コル

からむテレヌタを返したす。 コル 述語を枡す芁玠の堎合、 捕食、削陀されたした。

参照 filter .

=> (リスト (奇数を削陀? [1 2 3 4 5 6 7]))
[2、4、6]

=> (リスト (䜍眮を削陀したすか? [1 2 3 4 5 6 7]))
[]

=> (リスト (neg を削陀したすか? [1 2 3 4 5 6 7]))
[1、2、3、4、5、6、7]

繰り返す
䜿甚法 繰り返す x)

次の反埩子 (無限) を返したす。 x.

=> (リスト (テむク 6 (「s」を繰り返す)))
[あなた、あなた、あなた、あなた、あなた、あなた]

繰り返し
䜿甚法 (繰り返し fn

呌び出しおむテレヌタを返したす fn 繰り返す。

=> (むンポヌト [ランダム [randint]])

=> (list (take 5 (繰り返し (fn [] (randint 0 10)))))
[6、2、0、6、7]

取る
䜿甚法 取った n コル

最初の芁玠を含む反埩子を返したす。 n のメンバヌ コル。 レむズ 倀゚ラヌ if n is
負。

=> (リスト (テむク 3 [1 2 3 4 5]))
[1、2、3]

=> (リスト (テむク 4 (「s」を繰り返す)))
[あなた、あなた、あなた、あなた]

=> (リスト (テむク 0 (「s」を繰り返す)))
[]

取る
䜿甚法 (n番目を取る n コル

すべおを含む反埩子を返したす。 n- 番目のメンバヌ コル.

=> (リスト (take-nth 2 [1 2 3 4 5 6 7]))
[1、3、5、7]

=> (リスト (take-nth 3 [1 2 3 4 5 6 7]))
[1、4、7]

=> (リスト (take-nth 4 [1 2 3 4 5 6 7]))
[1、5]

=> (リスト (take-nth 10 [1 2 3 4 5 6 7]))
【1]

しばらくの間
䜿甚法 (しばらくの間 捕食 コル

からむテレヌタを返したす。 コル 限り 捕食 収益 ◯.

=> (リスト (テむク䞭の䜍眮? [ 1 2 3 -4 5]))
[1、2、3]

=> (リスト (take-while neg? [ -4 -3 1 2 5]))
[-4、-3]

=> (リスト (take-while neg? [ 1 2 3 -4 5]))
[]

ゞップりィズ
バヌゞョン 0.9.13 の新機胜。

䜿甚法 (ゞッパヌ付き fn コル ...

に盞圓 ZIPですが、タプルを䜜成する代わりに耇数匕数関数を䜿甚したす。 もし
ゞップりィズ N 個のコレクションで呌び出されるず、 fn N 個の匕数を受け入れる必芁がありたす。

=> (むンポヌト挔算子)
=> (リスト (zipwith 挔算子.add [1 2 3] [4 5 6]))
[5、7、9]

リヌダヌ マクロ
Reader マクロは、Lisp に構文をその堎で倉曎および倉曎する機胜を䞎えたす。 欲しくないですよね
ポヌランド語衚蚘 リヌダヌ マクロを䜿甚するず、それを簡単に行うこずができたす。 Clojure のような方法が必芁です
正芏衚珟? Reader マクロでもこれを簡単に行うこずができたす。

構文
=> (defreader ^ [expr] (print expr))
=> #^(1 2 3 4)
1 2 3 4
=> #^「こんにちは」
"こんにちは"
=> #^1+2+3+4+3+2
1+2+3+4+3+2

Hy にはタプルのリテラルがありたせん。 嫌いだず蚀っおみたしょう (, ... そしお䜕か他のものが欲しいです。 これ
これはリヌダヌマクロがうたく解決できる問題です。

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

Clojure のように正芏衚珟のリテラルを䜿甚するこずもできたす。

=> (むンポヌト再)
=> (defreader r [expr] `(re.compile ~expr))
=> #r".*"
<_sre.SRE_Pattern オブゞェクト (0xcv7713ph15#)>

補品の導入
恐怖者 リヌダヌ マクロのシンボル名ずしお XNUMX 文字を受け取りたす。 もう䜕でも
゚ラヌが返されたす。 実装に関しおは、 恐怖者 で芆われたラムダに展開したす。
デコレヌタヌ。 このデコレヌタヌは、ラムダをそのモゞュヌル名ずずもに蟞曞に保存したす。
シンボル。

=> (defreader ^ [expr] (print expr))
;=> (with_decorator (hy.macros.reader ^) (fn [expr] (print expr)))

# に拡倧したす (dispatch_reader_macro ... シンボルず匏が枡される堎所
正しい機胜。

=> #^()
;=> (dispatch_reader_macro ^ ())
=> #^「こんにちは」
"こんにちは"

譊告
Hy のレクサヌずパヌサヌの制限により、リヌダヌ マクロは定矩されたマクロを再定矩できたせん
のような構文 ()[]{}。 この問題は将来的に解決される可胜性が高くなりたす。

内郚 Hy ドキュメンテヌション
泚意
これらのビットは䞻に Hy 自䜓をハッキングする人にずっお圹立ちたすが、次の目的にも䜿甚できたす。
マクロプログラミングをさらに深く掘り䞋げる人。

Hy Models
抂芁 〜ぞ Hy Models
Hy モデルは通垞の Python オブゞェクトの䞊にある非垞に薄い局であり、Hy ゜ヌスを衚したす
デヌタずしおのコヌド。 モデルは゜ヌスの䜍眮情報のみを远加し、いく぀かのメ゜ッドを远加したす。
Hy ゜ヌス コヌドのクリヌンな操䜜 (マクロなど) をサポヌトしたす。 それを達成するために
目暙ずしお、Hy モデルは基本 Python クラスのミックスむンであり、 HyObject.

HyObject
hy.models.HyObject Hy モデルの基本クラスです。 実装するメ゜ッドは XNUMX ぀だけです。 replace,
これは、珟圚のオブゞェクトの゜ヌス䜍眮を匕数ずしお枡されたものに眮き換えたす。
これにより、倉曎された匏の元の䜍眮を远跡できるようになりたす。
マクロは、コンパむラ内であっおも、玔粋な hy マクロ内であっおも。

HyObject Hy モデルをむンスタンス化するために盎接䜿甚するこずを目的ずしたものではなく、ミックスむンずしおのみ䜿甚するこずを目的ずしおいたす。
他のクラスの堎合。

Models
括匧で囲たれたリストず括匧で囲たれたリストは、Hy パヌサヌによっお耇合モデルずしお解析されたす。

ハむリスト
hy.models.list.HyList 「反埩可胜な」Hy モデルの基本クラスです。 その基本的な䜿い方は、
括匧で囲たれたものを衚す [] リスト。トップレベルの匏ずしお䜿甚するず、次のように倉換されたす。
コンパむル段階での Python リスト リテラル。

HyList を別の反埩可胜なオブゞェクトに远加するず、巊偎のオブゞェクトのクラスが再利甚されたす。
これは、マクロ内で Hy オブゞェクトを連結する堎合などに䟿利な動䜜です。

ハむ匏
hy.models.expression.HyExpression 受け継ぐ ハむリスト 括匧付きの () 衚珟。 の
これらの匏のコンパむル結果は、リストの最初の芁玠によっお異なりたす。
コンパむラは、コンパむラの特殊圢匏、ナヌザヌ定矩マクロ、およびコンパむラ間で匏をディスパッチしたす。
通垞の Python 関数呌び出し。

ハむディクト
hy.models.dict.HyDict 受け継ぐ ハむリスト 䞭括匧の堎合 {} コンパむルする匏
Python 蟞曞リテラルたで。

蟞曞の代わりにリストを基底クラスずしお䜿甚する決定 ハむディクト より簡単にできたす
マクロでの蟞曞の操䜜、耇合匏を蚱可するずいう远加の利点
dict キヌずしお (たずえば、 ハむ匏 Python クラスはハッシュ可胜ではありたせん)。

アトミック Models
入力ストリヌムでは、文字列の Python 衚蚘法に埓っお二重匕甚笊で囲たれた文字列が、
単䞀のトヌクンずしお解析され、 ハむストリング.

スペヌス、括匧、匕甚笊、二重匕甚笊を陀く、連続した文字列
ずコメントは識別子ずしお解析されたす。

識別子は、解析フェヌズ䞭に次の順序でアトミック モデルに解決されたす。

· HyInteger

· ハむフロヌト

· ハむコンプレックス (原子が裞でない堎合 j)

· ハむキヌワヌド (原子が次で始たる堎合 :)

· ハむシンボル

ハむストリング
hy.models.string.HyString 文字列ず同等の Hy モデルの基本クラスです。 たた
二重匕甚笊で囲たれた文字列リテラルを衚したす。 ""、Unicode文字列にコンパむルされたす。
Python のリテラル。 ハむストリングス Python 2 では Unicode オブゞェクトを継承し、Python XNUMX では文字列オブゞェクトを継承したす。
Python 3 (したがっお゚ンコヌドに䟝存したせん)。

ハむストリング ベヌスのモデルは䞍倉です。

Hy リテラル文字列は耇数行にたたがるこずができ、パヌサヌによっお XNUMX ぀の文字列ずしおみなされたす。
Unicode 文字列の Python ゚スケヌプを考慮したナニット。

数倀の Models
hy.models.integer.HyInteger 敎数リテラルを衚したす ( 長い Python 2 で入力したす。
& int型 Python 3 侊)。

hy.models.float.HyFloat 浮動小数点リテラルを衚したす。

hy.models.complex.HyComplex 耇雑なリテラルを衚したす。

数倀モデルは、察応する Python ルヌチンず有効な数倀 Python を䜿甚しお解析されたす。
リテラルは察応する Hy に倉換されたす。

ハむシンボル
hy.models.symbol.HySymbol Hy 蚀語でシンボルを衚珟するために䜿甚されるモデルです。 それ
受け継ぐ ハむストリング.

ハむシンボル Python の盞互運甚性を高めるために、オブゞェクトは解析フェヌズで砎壊されたす。

・アスタリスクで囲たれた蚘号*) は倧文字に倉換されたす。

· ダッシュ (-) はアンダヌスコア (_);

· 末尟に疑問笊が XNUMX ぀ (?) が先頭に倉わりたす は_.

泚意: マングリングは解析フェヌズ䞭に行われるため、次のこずが可胜です。
Hy ゜ヌス コヌドでは生成できない HySymbol をプログラムで生成したす。 そんな
このメカニズムは、gensym によっお「むンタヌンされおいない」シンボルを生成するために䜿甚されたす。

ハむキヌワヌド
hy.models.keyword.HyKeyword Hyのキヌワヌドを衚したす。 キヌワヌドは、で始たる蚘号です。
a :。 クラスは継承したす ハむストリング.

区別するために ハむキヌワヌド から HySymbols、非自発的可胜性な​​し
クラッシュ、私甚 Unicode 文字 「\uFDD0」 キヌワヌドリテラルの先頭に付加されたす
保管前。

デメリット 现胞
hy.models.cons.HyCons は Python フレンドリヌの衚珟です 短所 现胞。 コンスセルは、
Scheme や Common などの「通垞の」LISP バリアントの機胜を暡倣するのに特に䟿利です
舌足らずの発音。

コンス セルは 2 項目のオブゞェクトであり、 自動車 頭ず cdr しっぜ。 䞀郚のLispでは
バリアントでは、コンス セルが基本的な構成芁玠であり、S 匏は実際には
コンスセルのリンクされたリストずしお衚されたす。 い぀ものように、Hyではそうではありたせん
匏は Python リストでラップされお構成されたす。 ハむ匏。 しかし、 ハむコンズ
このように、「通垞の」Lisp バリアントの動䜜を暡倣したす。

· (短所 䜕か なし) is (HyExpression [䜕か]

· (短所 䜕か いく぀かのリスト) is タむプ いく぀かのリスト) (+ [䜕か] いく぀かのリスト)) if
いく぀かのリスト から継承 リスト).

· 取埗する (短所 a b) 0) is a

· スラむス (短所 a b) 1) is b

Hy はドット付きリスト構文をサポヌトしおいたす。 '(a . b) 手段 (短所 'a 'b) & '(a b . c) 手段
(短所 'a (短所 'b 'c))。 コンパむラがトップレベルで cons セルに遭遇するず、
コンパむル゚ラヌ。

ハむコンズ 枡された匕数 (car ず cdr) を Hy 型でラップし、操䜜を容易にしたす。
マクロコンテキストの cons セル。

Hy 内郚 理論
抂芁
Hy の内郚は Python バむトコヌドのフロント゚ンドずしお機胜するため、Hy 自䜓は
Python バむトコヌドにコンパむルされ、未倉曎の Python ランタむムで Hy コヌドを実行できるようになりたす。
気づかずに。

これを行う方法は、Hy を内郚 Python AST デヌタ構造に倉換するこずです。
Python 暙準のモゞュヌルを䜿甚しお、その AST を Python バむトコヌドに構築したす
これにより、Python 内郚のすべおの䜜業をすべおのラむブラリで耇補する必芁がなくなりたす。
単䞀の Python リリヌス。

Hy は XNUMX ぀の段階で機胜したす。 次のセクションでは、゜ヌスから゜ヌスたでの Hy の各ステップに぀いお説明したす。
ランタむム。

ステップ 1 & 2: トヌクン化 & 解析
Hy をコンパむルする最初の段階は、゜ヌスを凊理できるトヌクンに倉換するこずです。 私たちは
rply ずいうプロゞェクトを䜿甚したす。これは、サブセットで曞かれた非垞に優れた (そしお高速な) パヌサヌです。
rpython ず呌ばれる Python の。

字句解析コヌドはすべお次のように定矩されおいたす。 hy.lex.lexer。 このコヌドはほずんどが Hy を定矩しおいるだけです
文法であり、実際の難しい郚分はすべお rply によっお凊理されたす -- 定矩するだけです
rply の「コヌルバック」 hy.lex.パヌサヌ、生成されたトヌクンを受け取り、
こんにちはモデルたち。

Hy モデルは Hy の「AST」ず考えるこずができ、マクロはこれを操䜜したす。
(盎接)、コンパむラが Hy をコンパむルするずきに䜿甚するものです。

関連項目 ALSO
セクション Hy Models Hy モデルずその意味の詳现に぀いおは、こちらをご芧ください。

手順 3: Hy 線集 〜ぞ Python AST
Hy の魔法のほずんどがここで起こりたす。 ここで Hy AST (モデル) を取り䞊げたす。
そしおそれらを Python AST にコンパむルしたす。 いく぀かのファンキヌな出来事がここで起こりたす。
AST の問題を解決し、コンパむラでの䜜業は私たちが行う最も重芁な䜜業の XNUMX ぀です。
持っおる。

コンパむラは少し耇雑なので、最初は理解できなくおも心配する必芁はありたせん。
正しくなるには少し時間がかかるかもしれたせん。

コンパむラぞの䞻な゚ントリポむントは次のずおりです。 HyASTCompiler.compile。 このメ゜ッドが呌び出されるず、
クラス䞊の唯䞀の実際の「パブリック」メ゜ッド (぀たり、実際には、
そのメ゜ッドを超える API)。

実際、内郚的にさえ、盎接再垰するこずはほずんどなく、ほずんどの堎合匷制的に再垰したす。
ハむツリヌスルヌ コンパむル、匏のサブ芁玠でこれを行うこずがよくありたす。
我々が持っおいるこず。 サブ芁玠を適切にディスパッチできるかどうかは、Type ベヌスのディスパッチャ次第です。

コンパむルを実行するすべおのメ゜ッドには、 @builds() デコレヌタヌ。 あなたはできる
コンパむルする Hy モデルのクラスを枡すか、文字列を䜿甚できたす。
衚珟。 これはすぐに解決したす。

名 ステヌゞ タむプディスパッチ
から始めたしょう コンパむル 方法。 最初に行うこずは、オブゞェクトのタむプを確認するこずです
私たちは構築しおいたす。 を構築できる方法があるかどうかを調べたす。 タむプ 我々
を持っおおり、それを凊理できるメ゜ッドにディスパッチしたす。 それができる方法がない堎合は、
その型を構築するず、内郚で 䟋倖.

たずえば、 ハむストリング、Hy AST から Python ぞのほが 1 察 1 のマッピングがありたす。
AST。 の コンパむル文字列 メ゜ッドは ハむストリング、およびを返したす ast.Str()
正しい行番号ず内容が入力されたす。

マクロ展開
を取埗したら ハむ匏、これが既知のマクロかどうかを確認し、プッシュしたす。
を呌び出すこずで拡匵されたした hy.macros.macroexpand、結果を にプッシュしお戻したす。
HyASTCompiler.compile.

二番 ステヌゞ 匏のディスパッチ
唯䞀の特殊なケヌスは、 ハむ匏に応じお異なるASTを䜜成する必芁があるため、
問題の特別なフォヌムに぀いお。 たずえば、䜕かを打ったずき、 if true true 間違い、我々
を生成する必芁がありたす ast.If、サブノヌドを適切にコンパむルしたす。 ここは、 @builds()
匕数ずしお文字列を指定した堎合。

  コンパむル匏 (これは @builds(HyExpression)発送したす
最初の匕数の文字列に基づきたす。 䜕らかの理由で最初の匕数がそうでない堎合は、
文字列の堎合、その堎合も適切に凊理したす (おそらく、 䟋倖).

文字列が Hy に知られおいない堎合、デフォルトで ast.Call、しようずしたす
ランタむム呌び出しを実行したす (Python では次のようなもの) foo).

問題 ヒット   Python AST
Python AST は優れおいたす。 そのおかげで、このような匷力なプロゞェクトを構築できるようになりたした。
Python ずあたり激しく戊う必芁がなくなりたす。 他のものず同じように、私たちは
ここでは、遭遇する可胜性のある䞀般的な問題の短いリストを瀺したす。

Python 差別化する の間に ステヌトメント & 匏.

これは倧したこずではないように聞こえるかもしれたせん。実際、ほずんどの Python プログラマヌにずっお、これは次のずおりです。
すぐに「そうですね」の瞬間になりたす。

Python では、次のようなこずを行いたす。

印刷 for x in 範囲10 パス、理由 印刷 匏を出力し、 for ではありたせん
匏、これは制埡フロヌ ステヌトメントです。 のようなもの 1 + 1 そのたたの匏です ラムダ
x: 1 + x、ただし、次のような他の蚀語機胜 if, forたたは while ステヌトメントです。

これらには Python にずっお「䟡倀」がないため、䜕かを行うため、Hy での䜜業が難しくなりたす。
ような 印刷 if true true 間違い それは䞀般的なだけでなく、予想されるこずです。

その結果、私たちは、 結果 オブゞェクト、私たちはあらゆるものを提䟛したす ast.stmt
実行する必芁があるものず、単䞀の ast.expr 䜕かの倀を取埗するために䜿甚できたす
ちょうど実行されたした。 Hy は、実行䞭に匷制的に䜕かを割り圓おるこずでこれを実珟したす。

䟋ずしお、Hy:

(print (true true false の堎合))

次のようになりたす:

真であれば
_mangled_name_here = True
その他
_mangled_name_here = False

_mangled_name_here を印刷

OK、それは少し嘘でした。なぜなら、このステヌトメントを実際に次のように倉換するからです。

print True の堎合は True、それ以倖の堎合は False

物事を無理やり抌し蟌むこずで、 ast.expr できれば可胜ですが、䞀般的な考え方は圓おはたりたす。

手順 4: Python バむトコヌド 出力 & ランタむム
Python AST ツリヌが完成したら、それを Python にコンパむルしおみたす。
バむトコヌドをプッシュスルヌしお 評䟡する。 ここから先は、私たちはもうコントロヌルできなくなり、
Python がすべおを凊理したす。 これが、Python トレヌスバック、pdb、
ゞャンゎアプリは動䜜したす。

Hy マクロ
䜿い方 ゲンシム for より安党な マクロ
マクロを䜜成するずきは、倖郚倉数をキャプチャしたり、マクロを䜿甚したりしないように泚意する必芁がありたす。
ナヌザヌコヌドず競合する可胜性のある倉数名。

マクロの䟋を䜿甚したす nif 参照しおください
http://letoverlambda.com/index.cl/guest/chap3.html#sec_5 より完党な説明に぀いおは。)
nif は䟋であり、数倀のようなものです if、匏に基づいお、次のいずれかが
匏が正、れロ、たたは負であるかどうかに応じお、3 ぀の圢匏が呌び出されたす。

最初のパスは次のようになりたす。

(defmacro nif [expr pos-form XNUMX-form neg-form]
`(let [[obscure-name ~expr]]
(cond [(pos? obscure-name) ~pos-form]
[(れロ?あいたいな名前) ~れロの圢匏]
[(neg?あいたいな名前) ~neg-form])))

コラボレヌ あいたいな名前 他の倉数ず競合しないように倉数名を遞択する詊みです。
コヌド。 しかし、もちろん、善意ではありたすが、これが保蚌されるわけではありたせん。

メ゜ッド gensym は、たさにそのような堎合に新しい䞀意のシンボルを生成するように蚭蚈されおいたす。
より優れたバヌゞョンの nif だろう

(defmacro nif [expr pos-form XNUMX-form neg-form]
(let [[g (gensym)]]
`(let [[~g ~expr]]
(cond [(pos? ~g) ~pos-form]
[(れロ? ~g) ~れロ圢匏]
[(neg? ~g) ~neg-form]))))

シンボルが XNUMX ぀しかないため、これは簡単なケヌスです。 ただし、耇数必芁な堎合は、
gensym には、基本的に䞀連の う
文

(gensonyms [abc] 付き)
...

次のように展開されたす:

([[a (gensym)
[b (gensym)
[c (gensym)]]
...

それで私たちが曞き盎した nif 次のようになりたす:

(defmacro nif [expr pos-form XNUMX-form neg-form]
(gensonym 付き [g]
`(let [[~g ~expr]]
(cond [(pos? ~g) ~pos-form]
[(れロ? ~g) ~れロ圢匏]
[(neg? ~g) ~neg-form]))))

最埌に、これらすべおを実行する新しいマクロを䜜成できたす。 デフマクロ/g! ずる
で始たるすべおの蚘号 g! そしお自動的に電話をかけたす ゲンシム 残りの郚分で
シンボル。 それで が になる (gensym 「あ」.

私たちの最終バヌゞョンは、 nif、で構築 デフマクロ/g! になりたす

(defmacro/g! nif [expr pos-form XNUMX-form neg-form]
`(let [[~g!res ~expr]]
(cond [(pos? ~g!res) ~pos-form]
[(れロ? ~g!res) ~れロ圢匏]
[(neg? ~g!res) ~neg-form]))))

チェック マクロ Arguments & 調達 䟋倖
Hy コンパむラ ビルトむン

寄皿者 モゞュヌル INDEX


内容

アナフォリック マクロ
バヌゞョン 0.9.12 の新機胜。

アナフォリック マクロ モゞュヌルにより、Hy での関数型プログラミングが非垞に簡朔か぀簡単になりたす。
読み。
アナフォリック マクロは、䜕らかの圢匏を意図的にキャプチャするプログラミング マクロの䞀皮です。
照応 (参照する衚珟) によっお参照される可胜性のあるマクロに提䟛されたす。
別のものに。 — りィキペディア (http://en.wikipedia.org/wiki/Anaphoric_macro)

マクロ
AP-IF
䜿甚法 (ap-if (ふヌ) 印刷 それ

最初の圢匏の真実性を評䟡し、それをバむンドしたす。 it 真実ず停りの䞡方で
枝。

桃
䜿甚法 桃 [1 2 3 4 5] 印刷 それ

リスト内の各芁玠のフォヌムを評䟡しお副䜜甚を確認したす。

毎時毎時
䜿甚法 (ap-each-while リスト 捕食 䜓

述語フォヌムが返す各芁玠のフォヌムを評䟡したす。 ◯.

=> (ap-each-while [1 2 3 4 5 6] (< it 4) (print it))
1
2
3

ap マップ
䜿甚法 (APマップ フォヌム リスト

照応圢匏のマップは、関数ではなく通垞のマップず同じように機胜したす。
オブゞェクトは Hy 圢匏を取りたす。 特別な名前 it から珟圚のオブゞェクトにバむンドされたす。
反埩内のリスト。

=> (リスト (ap-map (* it 2) [1 2 3]))
[2、4、6]

ap-map-when
䜿甚法 (ap-map-when 予定 代衚 リスト

述語関数を䜿甚しおリスト䞊のマッピングを評䟡し、い぀適甚するかを決定したす。
フォヌム。

=> (リスト (ap-map-when奇数? (* it 2) [1 2 3 4]))
[2、2、6、4]

=> (リスト (ap-map-when Even? (* it 2) [1 2 3 4]))
[1、4、3、8]

ap フィルタヌ
䜿甚法 (apフィルタヌ フォヌム リスト

屈折蚈ず同様に、この類の怜蚌は官胜評䟡ず䞊行しお行うべきです。䞀般的に、抜出が進むに぀れお高枩になる抜出方法は、抜出が成功する確率が䜎い傟向にありたす。 ap マップ 関数の代わりに特別な圢匏を䜿甚しお、芁玠をフィルタリングしたす。
リスト。 特別な名前 it 反埩内の珟圚の芁玠にバむンドされたす。

=> (list (ap-filter (> (* it 2) 6) [1 2 3 4 5]))
[4、5]

AP拒吊
䜿甚法 (ap-拒吊 フォヌム リスト

この関数は次の逆のこずを行いたす ap フィルタヌ、を枡す芁玠を拒吊したす。
述語 。 特別な名前 it 反埩内の珟圚の芁玠にバむンドされたす。

=> (list (ap-reject (> (* it 2) 6) [1 2 3 4 5]))
[1、2、3]

ap-dotimes
䜿甚法 (ap-dotimes n 䜓

この関数は本䜓を評䟡したす n 特殊倉数を䜿甚した回 it からバむンドされる 0 〜ぞ
1-N。 副䜜甚に有効です。

=> (setv n [])
=> (ap-dotimes 3 (.append n it))
=> n
[0、1、2]

APファヌスト
䜿甚法 (ap-first 予定 リスト

この関数は、述語を枡す最初の芁玠を返したす。 なし、 ずずもに
特殊倉数 it 反埩内の珟圚の芁玠にバむンドされたす。

=>(ap-first (> it 5) (範囲 10))
6

ap-last
䜿甚法 (ap-last 予定 リスト

この関数は、述語を枡す最埌の芁玠を返したす。 なし、特別な
倉数 it 反埩内の珟圚の芁玠にバむンドされたす。

=>(ap-last (> it 5) (範囲 10))
9

apリダクション
䜿甚法 (AP リデュヌス フォヌム リスト オプション(&オプション) 初期倀

この関数は、本文の最初の 2 ぀の芁玠にフォヌムを適甚した結果を返したす。
リストがなくなるたで結果ず 3 番目の芁玠などを適甚したす。 オプションで、
初期倀を指定できるため、関数が初期倀に適甚され、
代わりに最初の芁玠を䜿甚したす。 これにより、反埩される芁玠が次のように公開されたす。 it ず電流
环積倀ずしお ACC.

=>(ap-reduce (+ it acc) (範囲 10))
45

ルヌプ/繰り返し
バヌゞョン 0.10.0 の新機胜。

  ルヌプ / 再発する マクロを䜿甚するず、プログラマヌは末尟呌び出し最適化 (TCO) を簡単に䜿甚できたす。
圌らの Hy コヌドに。
末尟呌び出しは、別のプロシヌゞャ内で最埌の呌び出しずしお発生するサブルヌチン呌び出しです。
アクション; 戻り倀を生成する堎合があり、その倀は呌び出し偎によっおすぐに返されたす。
手順。 サブルヌチンが実行する呌び出しの堎合、最終的には
この同じサブルヌチンが呌び出しチェヌンの䞋で再び呌び出され、末尟の䜍眮にあり、
このようなサブルヌチンは末尟再垰的であるず蚀われ、再垰の特殊なケヌスです。
末尟呌び出しは、新しいスタックを远加せずに実装できるため重芁です。
フレヌムを呌び出しスタックに远加したす。 珟圚の手順のフレヌムの倧郚分は必芁ありたせん。
さらに、テヌルコヌルのフレヌムに眮き換えるこずができたす。 プログラムはゞャンプできるようになりたす
呌び出されたサブルヌチンに。 暙準の呌び出しシヌケンスの代わりにそのようなコヌドを生成するこずは、
末尟呌び出しの削陀、たたは末尟呌び出しの最適化ず呌ばれたす。 末尟呌び出しの削陀が可胜
末尟䜍眮でのプロシヌゞャ呌び出しは goto ステヌトメントず同じくらい効率的に実装されたす。
したがっお、効率的な構造化プログラミングが可胜になりたす。 — りィキペディア (‐
http://en.wikipedia.org/wiki/Tail_call)

マクロ
ルヌプ
ルヌプ 再垰ポむントを確立したす。 ず ルヌプ, 再発する に蚭定された倉数を再バむンドしたす。
再垰ポむントを取埗し、コヌドの実行をその再垰ポむントに送り返したす。 もし 再発する で䜿甚されおいたす
末尟以倖の䜍眮の堎合、䟋倖がスロヌされたす。

䜿甚法 ルヌプ バむンディング 䌑み 䜓

䟋

(hy.contrib.loopが必芁)

(定矩階乗 [n]
(ルヌプ [[in] [acc 1]]
(if (れロ? i)
ACC
(recur (dec i) (* acc i))))

(階乗1000)

デフマルチ
バヌゞョン 0.10.0 の新機胜。

デフマルチ 指定された数の args および/たたは kwargs によっお関数をアリティ オヌバヌロヌドできたす。
Clojure の考え方からむンスピレヌションを埗た 定矩.

=> (hy.contrib.multiが必芁)
=> (デフマルチ楜しい
... ([a] "a")
... ([ab] "ab")
... ([abc] "abc"))
=> (楜しみ1)
「あ」
=> (楜しい 1 2)
「アブ」
=> (楜しい 1 2 3)
「ABC」

HACKING ON HY


加入 私たちの ハむブ
Hyをハックしに来おください

ぜひ遊びに来おください #ハむ on irc.freenode.net!

Twitter でこの件に぀いお話し合っおください #ハむ ハッシュタグ

それに぀いおブログに曞いおください

よく聞かずに隣の家のフェンスにスプレヌペむントしないでください。

ハック
これを行う

1。 䜜成する バヌチャル 環境:

$ virtualenv venv

そしおそれをアクティブ化したす:

$ 。 venv/bin/アクティブ化

たたは䜿甚 仮想環境ラッパヌ 仮想環境を䜜成および管理するには:

$ mkvirtualenv hy
$ワヌクオンハむ

2. ゜ヌス コヌドを取埗したす。

$ git clone https://github.com/hylang/hy.git

たたはフォヌクを䜿甚したす。

$ git クロヌン [メヌル保護]: /hy.git

3. ハッキングのためにむンストヌルしたす。

$ cd hy/
$ pip install -e 。

4. 他の開発芁件をむンストヌルしたす。

$ pip install -r 芁件-dev.txt

5. 玠晎らしいこずをする。 あなたが成し遂げたこずに察しお、誰かが喜びや嫌悪感で金切り声を䞊げたす。

テスト
テストは次の堎所にありたす テスト/。 を䜿甚しおおりたす 錻.

テストを実行するには:

$ 錻テスト

テストを曞く --- テストは良いものです!

たた、サポヌトされおいるすべおのプラットフォヌムず PEP 8 準拠のテストを実行するこずをお勧めしたす。
コヌド。 これを行うには、tox を実行したす。

$トックス

曞類
ドキュメントは次の堎所にありたす docs /。 を䜿甚しおおりたす スフィンクス.

HTML でドキュメントを䜜成するには:

$ cd ドキュメント
$ HTML を䜜成

ドキュメントを曞く --- ドキュメントは良いものです! このドクタヌも

貢献
貢献は倧歓迎であり、倧いに感謝されたす。どんな些现なこずでも Hy をより良くするのに圹立ちたす
驚くばかり。

プルリク゚ストは玠晎らしいです 私たちは圌らを愛しおいたす。 ここにクむックガむドがありたす:

· リポゞトリをフォヌクし、機胜/修正のトピック ブランチを䜜成したす。 盎接倉曎を加えるこずは避けおください
マスタヌブランチ䞊で。

· すべおの新機胜にはテストが䌎う必芁がありたす。

· PR を送信する前に、テストを実行し、コヌドがスタむルに照らしおチェックされおいるこずを確認しおください。
ガむド。 これらの䞡方を䞀床に行うこずができたす。

$メむクd

· コミットを論理ナニットに䜜成したす。これにより、埌で远跡およびナビゲヌトしやすくなりたす。 前に
PR を送信する堎合は、簡単に戻っおくるこずができる倉曎セットにコミットを圧瞮しおみおください。
埌で。 たた、倉曎セット内に停の空癜を残さないようにしおください。 これ
埌で空癜修正コミットが䜜成されるこずを回避したす。

· コミット メッセヌゞに関しおは、次の点に埓うようにしおください。

· Git コミット メッセヌゞの最初の行は 50 文字の制限を守っおください。

· 詳现/説明に぀いおは、この埌に空行を入れお続行しおください。
コミットに぀いお詳しく説明したす。

· 最埌に、自分自身を AUTHORS ファむルに (別のコミットずしお) 远加したす。あなたにはそうする䟡倀がありたす :)

· すべおの受信倉曎は、Hylang のコア チヌムの 2 人の異なるメンバヌによっお承認される必芁がありたす。
远加のレビュヌは明らかに歓迎ですが、いずれの堎合も少なくずも 2 回の承認が必芁です。
倉曎したす。

· コア メンバヌが PR を送信する堎合は、PR を含たない 2 人のコア メンバヌを芋぀けおください。
PR投皿者。 ここでの考え方は、PR 䜜成者ず協力し、もう XNUMX 人が承認するずいうものです。
倉曎セット党䜓。

· ドキュメントやその他の些现な倉曎に぀いおは、XNUMX ぀の ACK の埌にマヌゞするのが適切です。 私たちは持っおいる
カバレッゞが䜎いので、その障壁を䜎く保぀こずが望たしいでしょう。

基本 パッケヌゞ皮類
Hy のコア開発チヌムは次の開発者で構成されおいたす。

· ゞュリアン 段䞊

· モヌテン リンデルド

· J ケニス 神様です。

· Gergely ナゞ

· トゥッカ トゥルト

· カレン ラスタッド

· アビシェヌク L

· クリストファヌ アラン りェバヌ

· コンラヌト ヒンセン

· りィル カヌン・グリヌン

· Paul Cairns タリアモンテ

· ニコラス ダンドリモント

· ボブ トルバヌト

· Berker ペクサグ

· クリントン N. ドラむスバッハ

· 圌 セマゞ

onworks.net サヌビスを䜿甚しお hy オンラむンを䜿甚する


無料のサヌバヌずワヌクステヌション

Windows ず Linux のアプリをダりンロヌド

  • 1
    NSISNullsoft Scriptable Install System
    NSISNullsoft Scriptable Install System
    NSIS (ヌル゜フト スクリプト可胜むンストヌル
    システム) はプロのオヌプン ゜ヌスです。
    Windows むンストヌラヌを䜜成するためのシステム。 それ
    小さくお柔軟になるように蚭蚈されおいたす
    可胜な限り...
    NSIS をダりンロヌド: Nullsoft Scriptable Install System
  • 2
    認蚌パス
    認蚌パス
    AuthPass はオヌプン゜ヌスのパスワヌドです
    人気者をサポヌトする店長
    実瞟のある Keepass (kdbx 3.x および kdbx 4.x ...
    認蚌パスをダりンロヌド
  • 3
    ザビックス
    ザビックス
    Zabbix ぱンタヌプラむズクラスのオヌプン
    ゜ヌス分散監芖゜リュヌション
    監芖および远跡するように蚭蚈されおいたす
    ネットワヌクのパフォヌマンスず可甚性
    サヌバヌ、デバむス...
    ザビックスをダりンロヌド
  • 4
    KDiff3Comment
    KDiff3Comment
    このリポゞトリはメンテナンスされなくなりたした
    アヌカむブ目的で保管されたす。 芋る
    https://invent.kde.org/sdk/kdiff3 for
    最新のコヌドず
    https://download.kde.o...
    KDiff3 をダりンロヌド
  • 5
    USBロヌダヌGX
    USBロヌダヌGX
    USBLoaderGX は、
    わにっこのUSBロヌダをベヌスに
    libwiigui。 それはリストを可胜にし、
    Wiiゲヌム、ゲヌムキュヌブゲヌム、
    WiiずWiiUの自䜜...
    USBLoaderGX をダりンロヌド
  • 6
    凰
    凰
    Firebird RDBMS は ANSI SQL 機胜を提䟛したす
    & Linux、Windows で動䜜 &
    いく぀かの Unix プラットフォヌム。 特城
    優れた䞊行性ずパフォヌマンス
     パワヌ...
    ファむダヌバヌドをダりンロヌド
  • 詳现»

Linuxコマンド

Ad