Let's write β

プログラミング中にできたことか、思ったこととか

2013-05-01から1ヶ月間の記事一覧

Generalized LR法をHaskellで Part2

前回はXML風に木を出力するという機能をつけていましたが、本命はDOT言語に出力する事です。 そっちのほうが確認しやすいからね。というわけで付けてみました。 以下は変更した部分だけ -- ParseTreeをDOT言語として出力 type IndentLevel = Int --- インデ…

Generalized LR法をHaskellで

自然言語処理のGeneralized LR法をHaskellで書いてみました。 {-# LANGUAGE TemplateHaskell #-} module Main where import Data.List import Control.Monad import Control.Lens import Text.Printf -- 終端記号と非終端記号(行末も終端記号としておく) dat…

SuffixArrayを使った簡易検索エンジンやってみた。

文字列の検索アルゴリズムについてしらべていたら、良いチュートリアルを発見したので やってみました。 簡単なWebサーチエンジンの作り方 (defun all-suffix-node (str) (loop for s from 1 to (length str) collect (cons s (subseq str (1- s))))) (defun…

ルービックキューブと置換とHaskell

何度かプログラムを書いてるので、自分のためのまとめ記事(自分への記事なのでけっこうはしょっています) ルービックキューブの各セルの面に番号をわりあてる ルービックキューブの表面には全部で 9x6 = 54個のセルの表面が見えています。 この面の事をセル…

置換の合成

複数の置換を合成したりしたい場面がありました。 symm.hs module Symm(Symmetric(Symm),clean) where import Data.List import Data.Monoid data Symmetric a = Symm [(a,a)] deriving (Show,Eq) conc :: Eq a => [(a, a)] -> [(a, a)] -> [(a, a)] conc as…

複数のモジュールを同時includeした場合の処理を設定するNo.2

前回の記事では各モジュールのself includedの中で明示的にチェックを走らせる必要がありました。これがなかなか面倒だなという事だったので、もうすこし省略された記法で書けるようにしょうとおもっていました。 そこで、探していたところ、メソッド実行を…

複数のモジュールを同時includeした場合の処理を設定する

昨日の記事でCommonLispで複数のクラスを継承したときの設定をしたいという事でMOPで実装をこころみたのですが、どうも困難そうだったので一度Rubyで実装をこころみました class UnionRule def initialize(modules, action_proc) @modules = modules @proc =…

特定のパターンでクラスを継承した時に発動する機能を設定したい

タイトルの通り、あるクラスが特定のクラス(複数可)を継承した時になにか処理を実行させたいのです(たとえば、メソッドを定義したり、ログに出力したり..) で、CLOSならなんとかなるんじゃないかと、ちょっと作ってみています。 (eval-when (:load-toplevel …

ちょっとしたツール

入力された数値の最大と最小を除いた残りの値の平均を出す #!/usr/local/bin/ruby values = [] sum = 0; while line = gets val = line.to_f sum += val values << val end sum -= values.max sum -= values.min sum /= (values.length - 2) puts sum 標準入…