プログラム

複数ファイルからのコンパイル

複数ファイルからのコンパイルができた ファイルを1つのNamespaceにする感じ今んとこuseすると相手Namespaceの関数だけを取り込むような動きをする エントリーポイントになるNamespaceしか実行しないから use先のファイルに単に「print(1)」と書いたら動かな…

型解決

複数ファイルからコンパイルすんのに型解決は何パス必要か? お手軽にやるとしたら3パスかなぁ1パス目でstructのプロトタイプ作っておいて 2パス目でsubのプロトタイプ作る 3パス目でinferする減らす方法あるのかも知んないけどこれが一番スッキリ分かりやす…

カリー化 続々

クロージャを実装できた 関数外の変数に手を出している関数をマークして 関数外の変数を一個のframeにまとめる var a = 1 var b = 2 sub f(c: Int) print(a + b + c) f(3)↑これを↓こう変換する var a = 1 var b = 2 sub f_(frame, c: Int) print(frame.a + f…

カリー化 続き

上等カレーに行った 値段高いやろ、エビフライ乗ってるとはいえ1000円って…ルーの味はまんま得正 得正には毎日通ってたのでまず間違いない 得正はカレーうどんなのでスープで多少割ってたかもしれないが、得正の常連であったもんがほぼ違いが感じられないレ…

関数のカリー化

CILでカリー化をする時のメモ 部分適用かな?まぁどっちでもいいや クロージャをCILで実装するのに部分適用でやりたかったらメモ 例えばこんな感じの3引数の関数で先頭の引数をカリー化しちゃう curryなんて関数があった場合 int32 f1(int32 a, int32 b, int…

関数の呼び出し方

関数はどうやって実行できるのか調べてみた 前にも調べたような気がするけど、忘れたのでもう一回 C#でInt->String->Intの関数を呼ぶ場合 delegate int F_dele(String s); static int f(String s) {return(999);} var x = new F_dele(f); Console.Write(x("H…

ラムダ式の定義

こういう感じの「(x, y) => x」C#みたいなラムダ式を加えたら reduce/reduce conflictでおま、と怒られた ちゃんとreduce/reduceの判定できたんだ、このクソパーサジェネレータ・・・LALR(k)にするには今更どーなおしたらいいもんか分からない とりあえず文…

構造体が書けた

構造体が書けた 構造体そのものは簡単だったけど総称型を突っ込んだら内部構造色々変えないとうまくいかず面倒 こっちは当面ほっといて先にクロージャを実装しようかなぁ とりあえずドラゴンクエストビルダーズが発売される前に一通りやっちゃわないとほっと…

if文が書けた

VS2015用に作り直しているコンパイラで、やっとこif文が使えるようになった if文の式部分にはカッコがいらないのに関数呼び出しにはカッコがいるとか ちょっとどやねん

関数宣言

数値と文字列を受け取って数値を返す関数の定義を書くとしたらどう書いたほうがベターか Pascal系とC系のちゃんぽんみたいな構文定義を使っていたけど 関数呼び出しにカッコを使わないパーサを書いたら、なんとなく関数定義にカッコを書くのがダルくなった …

インデント対応パーサ

インデントでなんとなくパースできるのができた やっぱり文法は普通にしてlexでなんとかするのがいいかな %default Node %token<Node> BEGIN END %token<Node> var expr %left '+' '-' %left '*' '/' %% program : void | program stmt stmt : begin block end begin : B</node></node>…

字句解析のつづき

あ、できた a+b* c/ d-e 結果: ((a) + ((b * c) / d)) - e 文法はいじらんで字句解析で次がEOLを受け入れるっぽかったらEOLをぶちこむ EOLを受け入れへんかったら飲み込むって %default Node %token<Node> var expr %left '+' '-' %left '*' '/' %% program : void</node>…

文脈依存字句解析

改行で式が終わるパーサを書きたいけどよく分からない 式の明らか途中なら次行に継続したい なんかの本に状態付き字句解析だか文脈依存字句解析ってのってた気がする…? stmt : expr eol expr : var | expr '+' expr var : VAR eol : {フラグ立てる} EOL {フ…

ぶつぎるな

非常に迷惑なフォーマットがある 文字をutf-8エンコードしてBASE64エンコードしてくれている それはまぁいい 迷惑なのは1行の長さが決まってるとかの理由でBASE64した文字を勝手に切りよる おまけに切ったのは次行の先頭が空白かタブ文字で判断せなならん さ…

本のビューワ その6

大体できたのでGitHubに入れてみた ところがやり方がさっぱりわからない、前やったのに・・・Eclipseで リポジトリビューワー→リモート→リモートの作成 から行って全然でけへんて悩んでたら プロジェクト右クリ→チーム→リモート→プッシュ からいくといけた気…

本のビューワ その5

下のActionBarが透明になった、ヨッシャ、と思ったら なんか下だけ半透明じゃなく完全透明になってる気がする・・・ まぁ前よりましだから良いか <activity android:name="BookViewer" android:uiOptions="splitActionBarWhenNarrow" android:theme="@style/Theme.Holo.Light.WithTranslucentActionBar" /> </activity>

本のビューワ その4

シークバーみたいなんを付けようおもて、いつも出てると邪魔やし ActionBarに配置したろと ほんで画面のどっかタッチした場合だけActionBar出したろとついでに半透明にしたろと、思った結果がこのざま なんで上しか半透明にならんのやー(T-T) protected void…

本のビューワ その3

大体できた 今のところ本棚が固定パスなので、端末ごとにマウント位置ちごてしもてるから 本棚のパスを指定するUIつくらなあかんくさい、めんどい まだページめくりの読み込み中表示してないけど、とりあえずcifsのテストするときに考えよう デバッグ環境や…

拡張子

Javaでファイルパスから拡張子取得する方法で、cのsplitpathとか、.NET系のPathクラスに相当するのがよく分からなかったので 検索したらびびった ほぼ間違っている 大体これ int ext = path.lastIndexOf('.'); path.substring(ext + 1); 違いはまぁせいぜいe…

本のビューワ その2

スクリーンサイズに合わせて拡大縮小と次のページに行くのがなんとなく出来た ついでに縦長の画像は横回転して表示してみたScaleGestureDetectorとかいうのでピンチイン・アウトで拡大縮小やってみたけどちょっと違和感のある動き つか、エミュレータでマル…

本のビューワ

Androidで多分一番使ってるアプリが本のビューワで、PerfectViewerを重宝してたけど これがもう最近よく落ちよる なんかもう落ちだすととまらない感じ 類似のアプリを見ても、あーこの機能PerfectViewerにあったのにないやんってなる 落ちる以外は便利やねん…

再帰しながらyieldする方法

再帰しながらyieldするには、どしたらよかんべか 2文木を左優先でじゅんぐりむっくりアクセスするには・・・ と思って書いてみた なんとなく動いている Public Overridable Iterator Function GetEnumerator() As IEnumerator(Of Node) Implements IEnumerab…

C#のびっくり

ldftnを調べようと思ってとりあえず普段使いもしないくせにC#を書いたら class A { public static void Main() { var f = () => 1 + 2; } } ラムダ式を暗黙的に型指定されたローカル変数に割り当てることはできません と怒られた・・・ なんやと?なんでや!…

Haskellのお勉強 group byしてsum

タプルで1要素目を元にsum(group byするイメージ)してみる こんなデータがあったとする 名前 数 Tarou 10 Hanako 20 Jirou 30 Tarou 40 Hanako 50 Saburou 60 Hanako 70 これをTarouは50、Hanakoは140、Jirouは30、Saburouは60という結果を得たい とりあえず…

Haskellのお勉強 CSV

csvのパーサは状態遷移図こんな感じ で、これをHaskellで書くと、、、むむむ さっぱり分からんとりあえず改行でsplitしてカンマでsplitするのは簡単にかけるけどこれじゃ練習にならない パーサコンビネータ使うと負けな気がする また後日チャレンジするとし…

Haskellのお勉強 文字列の扱い

今日はwcとexprを実装してみた wcは文字数と行数だけ exprは結合規則はめんどいのでやんぴwc main = do contents <- getContents putStr "line_count = " putStrLn $ show $ line_count $ lines contents putStr "char count = " putStrLn $ show $ char_cou…

憂さ晴らし

むしゃくしゃしてやった、デバッグはしていない void bubble_sort(int xs[], int length) { for(int i = 0; i < length - 1; i++) { for(int j = i + 1; j < length; j++) { if(xs[i] > xs[j]) { int t = xs[i]; xs[i] = xs[j]; xs[j] = t; } } } }

Haskellのお勉強 ソート

Haskellでソートを書く ソートと言ってもIO絡まないのですぐできたsort import Data.List main = do contents <- getContents putStr $ unlines $ sort $ lines contents reverse import Data.List main = do contents <- getContents putStr $ unlines $ re…

Haskellのお勉強

Haskellを勉強し直す イマイチよくわかってなくて、特にIOとか文字を数字にする方法とかがヘルプ片手にしないと書けない こりゃたまらん 勉強し直すと言っても、関数型言語の決まって最初のサンプルがなぜかフィボナッチ数の計算だったりする あんなもんクソ…

VB12

Visual Studio 2013のVBでも試してみた 恒例の↓コレをコンパイルするとどうなるか結果、相変わらずこんなil吐いて来た・・・orz=3 .locals init (int32[0...,0...] V_0) ldc.i4 0xfe ldc.i4.s 85 newobj instance void int32[0...,0...]::.ctor(int32, int32…