Python

昆布だしで美味しいお雑煮を作ろう

Mochi 0.2.5 以降では、メールボックスを指定してアクター起動できます。 また、アクターではなくメールボックスに直接メッセージ送信できます。 下記の種類のメールボックスを指定可能です。 KombuMailbox(Kombu の SimpleQueue ベース) ZmqInbox(ZeroMQ…

Mochi 0.2.0 をリリースしました。

(7月27日追記)0.2.5以降はこの記事で紹介した機能は削除され、それを代替する機能が追加されています。追加された機能はhttp://i2y.hatenablog.com/entry/2015/07/27/090724を参照してください。 Mochi 0.2.0 をリリースしました。 このバージョンでは、シ…

Mochi で使える便利なツールと Python ライブラリ

sloc flosse/sloc flosse/sloc · GitHub sloc はソースコード行数をカウントするツールです。多数の言語に対応しており、githubリポジトリ上の最新バージョンでは Mochi にも対応しています。 現在のgithubリポジトリ上の最新バージョンの対応言語は下記の通…

Github から Mochi を直接インストールする方法

Mochi を PyPI からではなく Github から直接インストールするには、下記を実行します。 $ pip3 install git+https://github.com/i2y/mochi アップグレードする場合は、 $ pip3 install --upgrade git+https://github.com/i2y/mochi です。 下記は Mochi の…

pipの使い方を忘れたときは。。

pipの使い方を忘れたときは、下記のページをまず見ています。 pipの使い方 (2014/1バージョン) — そこはかとなく書くよん。 pipの使い方 (2014/1バージョン) — そこはかとなく書くよん。 それでも分からないときは、公式ドキュメントを参照しています。 http…

Mochi supports trailing closures from version 0.1.2

Mochi supports trailing closures from version 0.1.2. Example 1 def rmap(seq, closure): map(closure, seq) result = rmap([1, 2, 3]) -> print($1) $1 * 2 print(doall(result)) # -> 1 # -> 2 # -> 3 # => pvector([2, 4, 6]) Example 2 def foreach(s…

Mochiの開発経緯

たしか1年半1年くらい前に、何がきっかけかは忘れましたが、ふと、所謂オレオレ言語を作りたいと思いました。 非常に簡単な Scheme 処理系を作ったことがあったので、 Lisp 方言を作ろうと考えました。 Lisp 方言を作る過程で、新しいプログラミング言語を習…

Mochi が Infoworld とソフトアンテナブログで紹介されました。

Mochi が Infoworld とソフトアンテナブログで紹介されました。 Functional programming piques Ruby founder, picks up Python compiler この季節にぴったりのプログラミング言語「Mochi」 Infoworld の記事では、Ruby の開発者、まつもとさんの新言語、Str…

Mochi 0.0.9 をPyPIに登録しました。

Mochi 0.0.9 を PyPI に登録しました。 mochi 0.1.2 : Python Package Index Mochi 0.0.9 では、シーケンスの各要素を順番に、メッセージとしてアクターに送信する!>演算子と!&>演算子を導入しています。 !>演算子は、右辺のアクターに左辺の値をメッセージ…

PythonプログラマのためのMochi入門

# 元ネタはPythonプログラマのためのErlang入門←Erlang for Python Programmersの翻訳 MochiはPythonとよく似た構文の「Python上で動作する」、動的型付けの関数型言語だ。 この文章では、PythonとMochiで書いた階乗を計算する関数をとりあげ、関数型言語の…

Mochi を PyPI に登録

Mochi を PyPI に登録しました。 mochi 0.0.1 : Python Package Index mochi 0.0.1 : Python Package Index これにより、 $ pip install mochi でインストールできるようになりました。 インストール後は $ mochi >>> で REPL が立ち上がります。 気が向いた…

Mochi

Pythonと似た構文を持つプログラミング言語Mochiを作りました。 Purpleと同様にPython仮想マシン上で動作します。 i2y/mochi i2y/mochi · GitHub Purpleでシダを描いてみて、やっぱり前置記法では数式中心のコードは書きづらいなぁと思い、Purpleとは別にPyt…

Python Cookbook のオンラインバージョン

めも。 Python Cookbook

「プログラムでシダを描画する」を Purple で描画する

「プログラムでシダを描画する」をPythonで描画する の写経です。 上記ページに記載の再帰呼び出し版を、そのまま Purple で書いてみました。 コード (import random) (from-import PIL Image) (val N 20) (val xm 0) (val ym 0.5) (val h 0.6) (val width 5…

Purple で FizzBuzz

Purple で FizzBuzz を書くとこんな感じです。 (def fizzbuzz (n) (match [(% n 3) (% n 5)] (0 0) "fizzbuzz" (0 _) "fizz" (_ 0) "buzz" _ n)) (->> (range 1 31) (map fizzbuzz) tuple print) ->> は Clojure のスレッディングマクロ(のひとつ)と同じで…

Purple でフィボナッチ数

Rubyistが始めるElixir - フィボナッチ編 に掲載されているコードを Purple で書くと以下のようになります。 (defm fib (0) 0 (1) 1 ((and (int n) |> _ 0|)) (+ (fib (- n 1)) (fib (- n 2)))) 上記は下記と同じ意味です。 (def fib (n) (match n 0 0 1 1 (…

ぱいぱいJS

PyPy.js なんてあったんだ! 知らなかった。 https://rfk.id.au/static/pypyjs/ https://github.com/rfk/pypyjs/

Python で実装された Lisp 処理系

Purple をある程度実装したところで、同じようなものはきっと沢山あるよねと思い、 Python で実装された Lisp 処理系をぐぐってみたところやはり沢山ありました。 以下、そのリストです。 Python のバイトコードやASTに変換するタイプのもの(初リリース時期…

Python と Purple で条件に当てはまる最初の要素をリストから取得

Python: find first element in a sequence that matches a predicate に Python でリスト(イテラブル)から条件に当てはまる最初の要素を取得する方法が、幾つか記載されています。 その中のベストアンサー的な方法のコード例が下記サイトに掲載されていま…

Python で Lisp 方言

Python で Purple という Lisp 方言を作りました。 Python の仮想マシン上で関数型プログラミングっぽいことをするための言語です。 Purple 実はつい先ほどまでSpicaという名前でしたが、 同名のLispマシン/処理系があったので、急遽名前を変更しました。 動…

Python でリストを flatten

Python でネストしたリストをflattenする方法が Pythonでリストをflattenする方法まとめにまとめられています。 一段ネストしたリストをflattenする最速の方法は、itertoolsモジュールのレシピに書かれているchain.from_iterable関数を使うことであることが…

Python で部分適用

Python で部分適用する場合は、functoolsモジュールのpartial関数を使います。 こんな感じです。 from functools import partial def print_name(first_name, last_name): print(first_name + ' ' + last_name) print_name_kurt = partial(print_name, 'Kurt…

Python でカリー化

関数をカリー化するデコレータを書いてみました。 def curried(func): arg_count = func.__code__.co_argcount l = ['lambda arg_{0}: '.format(n) for n in range(arg_count)] l.append('func(') l.extend(['arg_{0}, '.format(n) for n in range(arg_count…

Python でスタックを消費しない末尾再帰

末尾再帰でスタックを消費しないようにするためのデコレータが紹介されています。 New Tail Recursion Decorator « Python recipes « ActiveState Code Pythonで末尾再帰最適化をする。 Pythonのクロージャで末尾再帰最適化をする。 上記の各リンク先のコー…