SMLUnitの出力をTAP形式にするテストランナーを書いた

SML

SMLUnitをSML#0.90からサルベージでgithubに上げたユニットテストライブラリに、TAPTestRunnerを実装しました。(githubリポジトリ(tap_supportブランチ)) TestRunnerというのは、SMLUnitを使って定義されたテストを実行して結果をダンプしてくれるモジュール…

Role Strategy Pluginを有効にしつつコミットフックをビルドトリガにする

Jenkinsはデフォルトではユーザ権限の管理が行えませんが、Role Strategy Pluginを使うと、かなり細かく権限の設定を行うことが出来ます。 素晴らしいですね。参考:Hudsonの操作権限をユーザ/グループ/ロール別に制御する で、これを有効にするとVCSのフッ…

サンプルでなんとなく理解するmllex

SML

やむを得ず調べてしまったので動く状態のサンプルを書き留めておきます。(タイガー本で書いたヤツとか忘れたわー(ノ`´)ノミ┻┻) mllexとは mllexはlexのSML版です。トークンに対応する正規表現を並べておくと、それをストリームから切り出すレキサ(字句解析…

datatype replication declarations の紹介

SML

SMLの地味な機能を紹介。簡単な使用例をあんまり見かけないのでマイナーな機能だと思います。(大学の授業ではやらないとは思う)まともな説明はこれくらいか>SML/NJのドキュメント(Datatype replication declarations)名前は似てますがSML#のリプリケーショ…

SML#のファンクタ引数の罠っぽい挙動

SML

あまりにも書くことがないので SML#(1.2.0) でハマッた挙動を書いておきます。 バグなのか仕様なのかちょっと判断に迷います。(githubに書くのは緊張するのです(;´∀`) ) 実装が以下。 structure T を受け取り、Sという別名を付けるだけのファンクタです。 …

SMLUnitをSML#0.90からサルベージ

SML

年明けて初めの記事ですね。今年もよろしくお願いします。 早速ですがSML#プロジェクトで開発されたユニットテストフレームワークであるSMLUnitをgithubにインポートしました(https://github.com/smlsharp/SMLUnit)。 昔はSML#のソースコードと一緒に配布さ…

SML# - C言語バインディング まとめ (ML/LL AdventCalendar20日目)

この記事は LL/ML Advent Calendar #LLAdventJP 20012/12/20の参加記事です。 出来心でRTした次の瞬間には犠牲に参加することになっていました。なごやこわい。 注意:この記事では SML#1.2.0 を使うものとしています。 SML# にはC言語バインディングをサポ…

ストリームではまった

SML

SML(というかML)界ではストリームと言えば 'a -> ('a, 'b) option こんな型が定番なようです。 これは標準ライブラリでも ('a,'b) StringCvt.reader として定義されています。*1 私が公開しているMsgPack-SMLでも、バイトシーケンスを渡すとmsgpackデータが…

SML#のコミッタになっていた

SML

仕事で使うことを目論んでSML#コンパイラタンをいじめ優しく検証する穏やかな日々…。(報告した不具合らしき現象) Owners have full access to all repositories and admin rights to the organization. View team: https://github.com/organizations/smlshar…

unfoldで配列の生成

SML

SMLの標準ライブラリには、配列を扱うモジュールとして Array と Vector があります。 これらのデータ構造を構築するために標準に用意されている関数は val tabulate : int * (int -> 'a) -> 'a array (* or vector *) これだけです。インデックスを受け取っ…

2012夏イベント個人的まとめ

ばたばたしててこんな時期になってしまったので、個々のイベントでなく今年の夏に参加したイベント3つについて参加記録を書き留めておきます。 写真は函数プログラミングの集いでもらって来た じぇねらるたんステッカー(+ 名札) 今年の夏は PPLサマースクー…

gitのorphanブランチを理解する

Git

Github Pagesに使えそうなのでmanの該当箇所を訳してみました*1。=>原文 orphanブランチというのは、元のブランチからの歴史を受け継がず、gitリポジトリ内で新しく0から歴史を持つブランチです。新しくルートになり、親コミットを持ちません。 リポジトリの…

SML版QuickCheck環境を構築する

Haskellには QuickCheck というテストフレームワークが存在します。 これは、テスト対象の関数の入力型が取りえる値をランダムに自動生成し、別に与えた性質(関数)を満たすかどうかをチェックしてくれるライブラリです。 指定された型の取りえる値の中からコ…

Firefox13のよく分からんタブページを無効にする

常時タブ100以上開いてるので画像で判別とかする気がない。Vertical Tabsが快適です。 ロケーションバーに about:config を指定する browser.newtab.url の値を空白にする これで今まで通りで空白ページになりました。書いてから気付いたけどtabnewとかで直…

redmineでsvnの設定をしたら設定画面で500エラーになる

redmineでsvnのリポジトリを設定したら、そのプロジェクトの[設定]をクリックするとInternal Server Error(500)が出るようになった。 発生条件 WindowsからredmineをLinuxへ移行した (このときwindowsのパスが設定されたdbを丸ごと移行) 同プロジェクトにLin…

Boost.勉強会#9 つくばとHaskellDayに参加

土日にBoost.つくば(5/26)とHaskellDay(5/27)に参加してきました。(っていつの間にやらもう木曜日じゃなイカ…。) どっちにも登壇してないものの二日連続はやはりキツイものがありました。簡単に振り返っておきます。 Boost.勉強会#9 つくば 初つくばでした。…

関数プログラミングの楽しみ 練習問題用リポジトリ作った

https://github.com/eldesh/fun_of_programmingThe Fun of ProgrammingというHaskellの薄い本があります。和訳版として 関数プログラミングの楽しみ という本も出版されています (私が読んでるのはこっち…(^^))関数プログラミングの楽しみ作者: Jeremy…

rand(3)を使ってSML# にSML/NJのRandを実装

SML

Basisに乱数無いのは何故なのか?(これ書くの多分3回目くらい) というわけで(?)、SML#でC言語のライブラリのインポートを試しつつSML/NJが提供している乱数のストラクチャ]を定義してみました。 (* * Rand : RAND (SML/NJ library clone) * * http://www.sm…

enable_ifにdecltypeを渡すとMSVC10が落ちる

C++

#include <iostream> #include <utility> #include <type_traits> template<typename C, typename V = void> struct enable_if : std::enable_if<C::value, V> { }; template<typename T> void sf (T const & t, typename enable_if<decltype(t)>::type * =0) { std::cout << "OK\n"; } int main () { sf(1); } ↓ [F5] ↓ fa…</decltype(t)></typename></c::value,></typename></type_traits></utility></iostream>

SML#でオーバーローディング!

SML

SMLでは、型システムがオーバーロードをうまく扱えないため、基本的にオーバーロード不可能なのですが、 トップレベルに公開されている一部の数値演算(関数)は特別扱いで、オーバーロードされています。(OCamlではこの特別扱いを撤廃してるのが特徴的です。…

SML#1.0をコンパイル

SML

Win7(32bit, cygwin)上へのインストール方法。 コンパイラは普通に動作します。インタプリタはすぐ落ちてしまいますが…。*1 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementBy…

サイボウズ・ラボユース最終成果報告会に潜り込んで来た

サイボウズ・ラボの学生支援制度の成果発表会に紛れ込んで来ました。 (竹迫さんのまとめ>http://developer.cybozu.co.jp/takesako/2012/03/1-909f.html) サイボウズ・ラボさんが始めた学生支援制度の第一期生の面々が、一年間の成果発表兼卒業式を行うのを眺…

fisher yates アルゴリズムで配列シャッフル

ローカルリポジトリを掃除していたらFisher-Yates法 の実装が見つかりました。 コミットのついでに紹介します。このアルゴリズムを使うと配列が O(n)時間 でシャッフル出来ます。 local fun swap xs i j = (* swap xs[i] xs[j] *) let val tmp = A.sub (xs, …

SMLでZipListを作る

本物のプログラマはHaskellを使うで紹介されているZipListを定義してみました。 この型を使うと、zipWithN をその場で組上げることが出来ます。(といっても最初にタプルのコンストラクタ渡すんですが) 型の定義 まず *モト* となる型を定義します。 signatur…

SMLでApplicativeを書く

コードはcodeplexに置いてあります。 (sml/njでuse "applicative.use"; するとApplicativeなOptionが使えます)) http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Applicative.html を参考にしました。 とりあえず下のレイヤから書いて…

SML/NJ インタプリタの表示設定を変更する

SML

SML/NJのインタプリタは, 入力した式の評価結果をいい感じに表示してくれるので便利ですが, 複雑なデータは適当に省略されて表示されてしまいます.たとえばこんな感じ. - val xs = List.tabulate (15,fn x=>x); val xs = [0,1,2,3,4,5,6,7,8,9,10,11,...] : …

Coqチュートリアル#4(最終回) に参加しました

Coqチュートリアル#4最終回に行って来ました。4回とも参加できたので皆勤賞です! 講師の [twitter:@tmiya_] さんと運営の [twitter:@kenkoba] さんお疲れ様でした。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t =…

純粋関数型言語のfoldlで副作用を起こす

http://d.hatena.ne.jp/i_k_b/20120215/1329320486に触発されてCleanでも書いてみました。 module foldout import StdEnv // 出力する関数 (Fileは一意でなければならない) // class (<<<) infixl a :: !*File !a -> *File msg :== ["hello,", " uniqueness"…

FreeBSDにredmineを入れる

portsが壊れている(というかインストールできないようになってる)ので手動で入れた。 ここの通りにすればよい>http://howtobsd.com/ 。 あらかじめrubyのバージョンが1.9になってる場合もどす必要がある。(see /usr/ports/UPDATING@20110823)gemのバージョ…

Coqチュートリアル#1 行ってきた

気になっていたところに Formal Methods Forum主催Coqチュートリアル#1があったので、どんなもんかと聞いてきました。 当日の資料もリンク先に挙がってますね。 受講者は8人くらい?来てました。 Formal Methods Forumの @tmiya_ さんが主に解説して @kenco…