Haskell
module Main where import Data.List.Split readTriangle :: FilePath -> IO [[Int]] readTriangle fpath = do content <- readFile fpath return $ map (map read . splitOn " ") $ lines content prob67 :: [[Int]] -> Int prob67 = head . prob67' where …
SATソルバーの実装に昨日あたり興味がわきまして、手始めにデータ構造とDIMACS CNFファイルのパーサーを書いて見ました。ファイルから読み込めるようになると今後開発するときのデバッグも用意になりますものね。 module Main where import System.Environme…
以前の構文木では、途中のスタックの状態を保存していなかったので、出力される構文木では どのような途中のスタックの経過をたどったのかが不明瞭でした。 そこで、すこし更新して、スタックの途中経過を構文木中に保存するようにしたので、 どのようなルー…
前回はXML風に木を出力するという機能をつけていましたが、本命はDOT言語に出力する事です。 そっちのほうが確認しやすいからね。というわけで付けてみました。 以下は変更した部分だけ -- ParseTreeをDOT言語として出力 type IndentLevel = Int --- インデ…
自然言語処理のGeneralized LR法をHaskellで書いてみました。 {-# LANGUAGE TemplateHaskell #-} module Main where import Data.List import Control.Monad import Control.Lens import Text.Printf -- 終端記号と非終端記号(行末も終端記号としておく) dat…
何度かプログラムを書いてるので、自分のためのまとめ記事(自分への記事なのでけっこうはしょっています) ルービックキューブの各セルの面に番号をわりあてる ルービックキューブの表面には全部で 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…
import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Char import Control.Monad data LambdaExpr = Var Char | Lambda LambdaExpr LambdaExpr | Apply LambdaExpr LambdaExpr deriving (Show) identifier :: GenParser Char st Lam…
昨日の昼ごろなんとなくパーザを書きたくなり、ちょうど論理式のパーザなんかが短時間で書くには適切なものだろうと思いまして書いてみました。Parsecのハイパワーな機能をつかってしまうことも考えたのですが、どうせならなんとなく自分で構造をくみ上げて…
かなり流行の波にのりおくれましたが、本日、急におもいたち すごいH本こと『すごいHaskellたのしく学ぼう!』を無事購入いたしました。