Enviar pesquisa
Carregar
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
•
2 gostaram
•
1,757 visualizações
Satoshi imai
Seguir
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 27
Baixar agora
Baixar para ler offline
Recomendados
MAP 実装してみた
MAP 実装してみた
Masakazu Asama
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Designer's Design Talk「デザインの基礎」
Designer's Design Talk「デザインの基礎」
典子 松本
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
#MRDevDaysJP HoloLens 2 アプリ開発入門
#MRDevDaysJP HoloLens 2 アプリ開発入門
Madoka Chiyoda
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
Koichi Sakata
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
Masahiro Nishimi
リーダブルコード
リーダブルコード
Keita Otsuka
Recomendados
MAP 実装してみた
MAP 実装してみた
Masakazu Asama
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Designer's Design Talk「デザインの基礎」
Designer's Design Talk「デザインの基礎」
典子 松本
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
#MRDevDaysJP HoloLens 2 アプリ開発入門
#MRDevDaysJP HoloLens 2 アプリ開発入門
Madoka Chiyoda
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
Koichi Sakata
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
Masahiro Nishimi
リーダブルコード
リーダブルコード
Keita Otsuka
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
最速C# 7.x
最速C# 7.x
Yamamoto Reki
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
つぶやきGLSLのススメ
つぶやきGLSLのススメ
notargs
Git flowの活用事例
Git flowの活用事例
Hirohito Kato
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code
Shinichi Takahashi
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
Return Oriented Programming
Return Oriented Programming
sounakano
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!
Shinnosuke Furuya
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
ROSでつながるVRChat
ROSでつながるVRChat
Hirokazu Onomichi
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Shinya Takamaeda-Y
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
AndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキング
Shota Shinogi
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
Yuichi Hasegawa
【Unite 2018 Tokyo】エディター拡張マニアクス2018
【Unite 2018 Tokyo】エディター拡張マニアクス2018
Unity Technologies Japan K.K.
Dll Injection
Dll Injection
Hiroaki Hata
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
おいしいLisp
おいしいLisp
Kent Ohashi
Mais conteúdo relacionado
Mais procurados
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
最速C# 7.x
最速C# 7.x
Yamamoto Reki
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
つぶやきGLSLのススメ
つぶやきGLSLのススメ
notargs
Git flowの活用事例
Git flowの活用事例
Hirohito Kato
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code
Shinichi Takahashi
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
Return Oriented Programming
Return Oriented Programming
sounakano
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!
Shinnosuke Furuya
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
ROSでつながるVRChat
ROSでつながるVRChat
Hirokazu Onomichi
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Shinya Takamaeda-Y
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
AndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキング
Shota Shinogi
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
Yuichi Hasegawa
【Unite 2018 Tokyo】エディター拡張マニアクス2018
【Unite 2018 Tokyo】エディター拡張マニアクス2018
Unity Technologies Japan K.K.
Dll Injection
Dll Injection
Hiroaki Hata
Mais procurados
(20)
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
最速C# 7.x
最速C# 7.x
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
つぶやきGLSLのススメ
つぶやきGLSLのススメ
Git flowの活用事例
Git flowの活用事例
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code
ドメイン駆動設計入門
ドメイン駆動設計入門
Return Oriented Programming
Return Oriented Programming
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
ROSでつながるVRChat
ROSでつながるVRChat
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
AndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキング
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
【Unite 2018 Tokyo】エディター拡張マニアクス2018
【Unite 2018 Tokyo】エディター拡張マニアクス2018
Dll Injection
Dll Injection
Semelhante a Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
おいしいLisp
おいしいLisp
Kent Ohashi
Introduction of Python
Introduction of Python
Tomoya Nakayama
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
Python Kyoto study
Python Kyoto study
Naoya Inada
Material
Material
_TUNE_
Rの高速化
Rの高速化
弘毅 露崎
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
Perlと出会い、Perlを作る
Perlと出会い、Perlを作る
goccy
Common LispでGPGPU
Common LispでGPGPU
gos-k
Objc lambda
Objc lambda
matuura_core
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
inaz2
Apache Spark チュートリアル
Apache Spark チュートリアル
K Yamaguchi
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
Tetsuya Hasegawa
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Semelhante a Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
(20)
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
おいしいLisp
おいしいLisp
Introduction of Python
Introduction of Python
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
Python Kyoto study
Python Kyoto study
Material
Material
Rの高速化
Rの高速化
MoteMote Compiler Plugin
MoteMote Compiler Plugin
Perlと出会い、Perlを作る
Perlと出会い、Perlを作る
Common LispでGPGPU
Common LispでGPGPU
Objc lambda
Objc lambda
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
Apache Spark チュートリアル
Apache Spark チュートリアル
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
Clojure programming-chapter-2
Clojure programming-chapter-2
Mais de Satoshi imai
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
Satoshi imai
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Satoshi imai
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法
Satoshi imai
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Satoshi imai
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup48 cl-online-learningによる文書分類
Satoshi imai
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成
Satoshi imai
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Satoshi imai
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
Satoshi imai
Mais de Satoshi imai
(9)
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
Último
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Último
(10)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
1.
PythonベースのLisp方言、 Hyのすすめ Satoshi Imai Twitter: @masatoi0 GitHub:
masatoi
2.
LispからPythonを利用する試み ● CLPython – Common
LispによるPythonの実装 – 開発停止中 ● Pythonは言語仕様が標準化されていないので最新の実装に 追従し続けなければならない(つらい) ● burgled-batteries – CPythonからCommon Lispへのブリッジ
3.
Hyとは? ● Python上で動くLisp方言 – HyからPythonの機能を使える –
PythonからHyの機能を使える ● Clojureに似た構文を持つ ● マクロで拡張可能 ● Hycc: 実行ファイル、共有ライブラリを生成できるコ ンパイラ
4.
なぜHyを使うのか? ● Pythonのライブラリを使いたい ● たまにしかPythonを使わないと構文を忘れる –
HyはClojureに近い構文なので連想が効く ● とにかくS式でプログラムを書きたい ● マクロを使いたい! ● デメリットとしては構文解析のオーバーヘッドが若干 ある
5.
インストール ● Githubから最新版を入れる ● Hyccのインストール $
pip install git+https://github.com/hylang/hy.git $ pip install hycc
6.
主なコマンド ● hy – REPL起動または.hyファイル読み込み ●
hyc – Pythonのバイトコードにコンパイルする ● hy2py – HyからPythonへトランスレートする ● hycc – Cython経由で実行ファイル/共有ライブラリを作る
7.
Emacsで使うとき: hy-mode ● package.elから入れられる ●
.hyファイルを開いた状態でM-x inferior-lispで REPLが起動する ● C-x C-eで式単位の評価ができたりする ● デバッガ、引数補完とかは無し M-x package-install hy-mode
8.
構文はClojureに似ている ● 関数定義 ● 変数定義/代入 (defn
fact [n] "docstring" (if (= n 0) 1 (* n (fact (- n 1))))) (def x 10) (setv y 20 z (* x y)) (print (.format "x: {0}, y: {1}, z: {2}" x y z)) ;; x: 10, y: 20, z: 200
9.
● オプショナル引数 ● 可変長引数 (defn
optional-arg [pos1 pos2 &optional keyword1 [keyword2 42]] [pos1 pos2 keyword1 keyword2]) (optional-arg 'pos1 'pos2 'key1) ; => ['pos1', 'pos2', 'key1', 42] (optional-arg 'pos1 'pos2 :keyword2 420) ; => ['pos1', 'pos2', None, 420] (defn plus [&rest args] (setv sum 0) (for [i args] (setv sum (+ sum i))) sum) (plus 1 2 3) ; => 6
10.
● 無名関数はClojureと同様にfn ● PythonはLISP-1(関数と変数で名前空間が共通) –
Schemeっぽい関数定義も可能 ((fn [one two three] (print one two three)) 1 2 3) ;; 1 2 3 (def fact2 (fn [n] (if (= n 0) 1 (* n (fact2 (- n 1))))))
11.
loop/recurマクロ ● 再帰呼び出しできるが末尾再帰最適化はしないの で、Clojureと同様にloop/recurマクロが用意されて いる (require [hy.contrib.loop
[*]]) (defn fact3 [n] (loop [[cnt 1] [acc 1]] (if (= cnt n) acc (recur (inc cnt) (* acc cnt)))))
12.
その他の制御構造 ● cond ● Pythonのfor (setv
val 20) (cond [(> val 30) (print "too big")] [(< val 10) (print "too small")] [True (print "just size!")]) ;; just size! (for [x (range 0 10)] (print x) (if (= (% x 2) 0) (continue)) (print "not even!"))
13.
● Clojureのスレッドマクロ ● 例外処理 (+
(- (* 2 3) 4) 5) ; => 7 (-> (* 2 3) (- 4) (+ 5)) ; => 7 (+ 5 (- 4 (* 2 3))) ; => 3 (->> (* 2 3) (- 4) (+ 5)) ; => 3 (as-> (* 2 3) x (- x 4) (+ x 5)) ; => 7 (as-> (* 2 3) x (- 4 x) (+ x 5)) ; => 3 (try (/ 2 0) (except [e ZeroDivisionError] (print "Division by zero")) (except [e TypeError] (print "Type Error")) (else (print "no errors")) (finally (print "all done")))
14.
マクロ定義 ● 伝統的マクロ – バッククォートとアンクォート(~、~@)で組み立てる –
変数捕捉の回避にはgensymが使える – 展開結果の確認にはmacroexpandが使える ;; letはlambdaのシンタックスシュガー (let ((one 1) (two 2) (three 3)) (print one two three)) ((fn [one two three] (print one two three)) 1 2 3) (defmacro let [var-pairs &rest body] (setv var-names (list (map first var-pairs)) var-vals (list (map second var-pairs))) `((fn [~@var-names] ~@body) ~@var-vals)) 展開
15.
データ構造 ● リスト '(1 2
3) (type '(1 2 3)) ; <class 'hy.models.expression.HyExpression'> ;; 参照はnth (nth '(1 2 3) 2) ; => 3 ;; map/reduce/filter (list (map inc (range 1 10))) ; => [2, 3, 4, 5, 6, 7, 8, 9, 10] (reduce + (map inc (range 1 10))) ; => 54 (list (filter (fn [x] (= (% x 2) 0)) (range 1 10))) ; => [2, 4, 6, 8]
16.
データ構造 ● ディクショナリ (setv dict
{"dog" "bark" "cat" "meow"}) (type dict) ; => <type 'dict'> ;; 参照はgetメソッド (.get dict "dog") ; => 'bark'
17.
importとrequire ● importでHy/Pythonのパッケージを読み込む ● パッケージがHyのマクロを含む場合はマクロ展開の ステップを挟む必要があるのでrequireを使う (import
sys ; 特定の関数だけをインポート [os.path [exists isdir :as dir? isfile :as file?]] ; 別名をつけてインポート [numpy :as np]) (require [hy.contrib.loop [*]] [hy.extra.anaphoric [*]])
18.
● パッケージを特定して呼び出し (import os) (.get
os.environ "LC_CTYPE") ; => 'en_US.UTF-8' (os.system "date") ; Thu Jun 29 15:20:38 JST 2017 ; => 0
19.
クラス定義 ● selfの属性に代入することでスロットを作る (defclass FooBar
[object] ;; コンストラクタ (defn --init-- [self x] (setv self.x x)) ;; アクセサ (defn get-x [self] self.x)) (setv obj (FooBar 1)) (.get-x obj) ; => 1
20.
クラス定義 ● クラスの継承 (defclass Dog
[object] (defn --init-- [self name] (setv self.name name))) (defclass SubDog [Dog] (defn --init-- [self name type] ;; 親クラスの--init--メソッドを呼び出す (.--init-- (super SubDog self) name) (setv self.type type))) (setv sd1 (SubDog "taro" "akita")) (print sd1.name) ; => taro (print sd1.type) ; => akita
21.
NumPyで行列のかけ算をしてみる (import [numpy :as
np]) (def arr (np.array [[1 2 3] [4 5 6] [7 8 9]])) arr.ndim ; => 2 arr.size ; => 9 arr.dtype ; => dtype('int64') ;; スカラー倍 (* arr 3) ;; 要素積 (* arr arr) ;; 行列積 (np.dot arr arr)
22.
● timeモジュールで処理時間を測ってみる (import time [numpy.random
:as rand]) ;; 1000×1000の乱数行列をつくる (def bigarr1 (rand.rand 1000 1000)) (def bigarr2 (rand.rand 1000 1000)) ;; 行列積にかかる時間を計測 (do (def start (time.time)) (np.dot bigarr1 bigarr2) (def elapsed-time (- (time.time) start)) (print (+ (.format "Evaluation took:: {0}" elapsed-time) " seconds"))) ; Evaluation took:: 0.07291960716247559 seconds
23.
timeitマクロを定義する (defmacro timeit [&rest
body] (setv start (gensym) end (gensym)) `(do (setv ~start (time.time)) ~@body (setv ~end (time.time)) (print (+ (.format "Evaluation took: {0}" (- ~end ~start)) " seconds")))) (timeit (np.dot bigarr1 bigarr2)) ; Evaluation took:: 0.07291960716247559 seconds
24.
Kerasでニューラルネットのモデルを定義してみる (def model (Sequential)) (.add
model (Dense :input-dim 784 :units 512)) (.add model (Activation "relu")) (.add model (Dropout 0.2)) (.add model (Dense :units 512)) (.add model (Activation "relu")) (.add model (Dropout 0.2)) (.add model (Dense :units 10)) (.add model (Activation "softmax")) (.compile model :loss "categorical_crossentropy" :optimizer (Adam) :metrics ["accuracy"]) (define-sequential model [(Dense :input-dim 784 :units 512) (Activation "relu") (Dropout 0.2) (Dense :units 512) (Activation "relu") (Dropout 0.2) (Dense :units 10) (Activation "softmax")] {:loss "categorical_crossentropy" :optimizer (Adam) :metrics ["accuracy"]})
25.
PythonからHyを呼ぶ ● Hyで書かれたモジュールを読み込む前にHy自体 をimportしておく import hy import
greetings greetings.greet("Foo") # Hello from hy, Foo print(greetings.THIS_WILL_BE_IN_CAPS_AND_UNDERSCORES) # See? (setv *this-will-be-in-caps-and-underscores* "See?") (defn greet [name] (print "hello from hy," name)) greetings.hy
26.
人気のインフラに乗る ● ESR: Lispで悟りが得られるけど実際に使うことは ないよ –
PG: コンピュータに読めればいいんで言語はプログラ マの自由だよ ● そうはいってもライブラリ少ないよ – →人気のインフラに乗るよ ● Clojure(JVM) ● Clojurescript(Javascript) ● Clasp(LLVM) ● Hy(Python)
27.
まとめ ● HyはPython上に作られたLisp方言 ● 構文はほとんどClojure ●
Pythonのライブラリを簡単に使えるし、Hyで書いた ものをPythonから使うのも簡単 ● 良くも悪くも薄いトランスレータなのでPythonの知 識は必要 ● いざとなったらマクロで構文を拡張できる安心感!
Baixar agora