動機
Lispで実際にアプリケーション書いてみたいと思ったけどCommon LispやSchemeなどのLisp方言はライブラリの管理とかよくわかんないしどうしようかと思ったところでPythonで書かれたLisp方言のHyを知ったのでFlaskを動かしてみる。HyだとPythonのVM上で動くのでFlaskだろうがDjangoだろうがKerasだろうが書ける。神。
Hyのインストール
pipenvを使ってインストールします。
$ mkdir hy_flask
$ cd hy_flask
$ pipenv --python 3.6.5
$ pipenv install hy
Python -> Hy
変数代入
hello = 'Hello world!'
(setv hello "Hello world!")
hyではシングルクォーテーションで囲っても文字列にならないので注意
関数定義
def say(hello):
print(hello)
(defn say [hello]
(print hello))
四則演算
print(5 + 2)
print(5 - 2)
print(5 * 2)
print(5 / 2)
(print (+ 5 2))
(print (- 5 2))
(print (* 5 2))
(print (/ 5 2))
インポート
import random
from operator import add, sub
import numpy as np
(import random)
(import [operator [add sub]])
(import [numpy :as np])
デコレータ
def deco(func):
def wrap():
print('--start--')
func()
print('--end--')
return wrapper
@deco
def hello():
print('Hello Decorator')
hello()
(defn deco [func]
(fn []
(print "--start--")
(func)
(print "--end--")))
#@(deco
(defn hello []
(print "Hello Decorator")))
(hello)
これで一通りFlaskでHello Worldくらいの文法は十分だと思うのでFlask動かしてみる。
Hy + Flask
前述のHyをインストールしたディレクトリでFlaskをインストールしてプログラムを書いていく
$ pipenv install flask
$ touch app.hy
app.hy
(import [flask [Flask]])
(setv app (Flask __name__))
#@((app.route "/")
(defn hello []
(return "Hello World!")))
(app.run)
実行
$ pipenv shell
$ hy app.hy
もしくは
$ pipenv run hy app.hy
http://localhost:5000
にアクセスしてHello World!
が出力されていれば終わり。