Lambdaカクテル

ウェブアプリケーションエンジニアです.玉石混淆です.

scheme

gauche/schemeのparser.pegモジュールを使ってSlackの会話をパースした

Gaucheのパーサジェネレータ parser.peg の使い方のメモ. インストール 基本的な流れ パーサの適用 パーサの生成 (パーサコンビネータの使用) $char $one-of $many $seq $do $lift $sep-by $alternate $between $or 試作 - Slack会話のパース 参考文献 イン…

TSVに色をつけるプログラムをSchemeで練習

Schemeを書きたくなったので,適当な課題がないか考えていたら,ログを見易くできるユーティリティがあればいいと思ったので,カラムごとに色をつけるSchemeスクリプトを作ってみた. TSVというか空白文字で区切られているならどれにでも使える. コード 処…

ニューラルネットワーク(多層パーセプトロン)その1

実装しながらメモ。メモ帳のかわり。備忘録。最近ニューラルネットワークにはまってます。小さなノード群が数学的問題を脳のように解決するなんて、夢があるじゃないですか。そんなわけでこのニューラルネットワーク(以下NN)のうち「多層パーセプトロン(Mult…

gaucheで自然対数の底を利用する

gaucheでニューラルネットワークを構築しようとしたら、eがデフォルトでは使えなかったのでメモ。自然対数の底eを利用するには、 (use math.const)で利用可能になる。math.const - 定数を参照。

無限ループするラムダ関数

(λx.xx)(λx.xx)はβ簡約できないので無限ループする。らしい。 詳しいことはよくわからんのだが、とにかく無限ループする。Scheme的な記述をすると( (lambda (x) (x x))(lambda (x) (x x)) )である。おそらく実用に供する機会は無いものと思われる。

全リストの全要素にprocedureを適用する関数

ついさっき、とあるプログラムを思いついたのでそのコーディングをしていた所、 便利なのに実装されていない*1関数を発見。 普通、map関数を複数リストで呼び出すと、同じインデックスのアイテム同士をprocedureで処理する。 この動作を拡張?して、「全ての…

FizzBuzzをできるだけ短く書く@119chars

プログラミング課題としてよく取り上げられるFizzBuzzをSchemeで書いてやろうという意欲がわいたので書いてみました。巷にはFizzBuzzを最短実装してやろうという向きがあるようなので、せっかくだし(Gaucheの独自実装を使うか悩んだ)書いてみました。前座は…

Schemeの正規表現では^$は行頭行末には対応しない

Gaucheの正規表現の罠 ここ数日、正規表現を使ったプログラムで遊んでいるが、思わぬ所でハマったのでメモ。 行頭がアスタリスクの行にヒットするべく、/^\*(.+)$/なんてコードを書いたら、これがまるで動かない。何度試してもダメだった。 仕方ないのでGoog…