...githubにssh接続できない2017年05月08日Linuxgithubのアカウントを作りなおしたついでにssh-keygenし直したら、何故かgithubに繋がらなくなってしまいました。Heapを紹介します。Heapと同様ですが、rankのかわりに要素数が左に偏るようになります。Heapについて語るだけで終わっていたので、今回はバリバリ実装していきます。Heapの定義のついてのおさらいをしておきましょう。Heapとは、以下の性質をもつ二分木です。...さくらVPSでシリアルコンソールからログインできない2017年05月05日LinuxさくらVPSのサーバーに標準で用意されているUbuntuをインストールしてシリアルコンソールを起動してみたところ、なぜかログインできない問題が発生。デフォルトで用意されているユーザー名がubuntuなの知りませんでした、というオチでした。Heapは、純粋関数型的にヒープを操作するために用いられるデータ構造です。Heapは要素が左に偏っている二分木として実装されます。データ構造自体は以下のように単純に構成できます。このデータ構造は以下のような制約を持ちます。二分木の改良2017年04月29日AlgorithmOCaml長年積んでたPFDSを読み始めることにしました。積んでる間に邦訳が出たらしいのですが、とりあえず気にしない方針で。いろいろなDFA2017年02月24日Haskellオートマトンの単位を落としてしまいましたが、正規表現エンジンは作っていきたいと思います。前回定義したDFAを思い出してみましょう。inkar-us-i.hatenablog.comDFAは状態を持ち、入力された文字によってその状態を変えていく機械でした。test/Spec.hsにこの1行を書くだけで、test/内の全部のテストを拾い集めて実行してくれるmainを生成してくれます。明日は正規表現エンジンのこと書きます。...rsyncでポート番号を指定する2017年02月20日Linux本当は正規表現エンジンについての話を書きたかったのですが、最近まとまった時間が取れないので関係ないことを書きます。...Coqで型クラスで群論2017年02月11日Coq群論に関する定義をするのであれば、型クラスを使うのが一番うまくいくと思います。for...Coqで型クラスでモナド2017年02月10日CoqHaskell大好きなので、モナドを実装できそうな言語があればとりあえず実装してしまう癖があります。Coqでモナド使うほどのことを書くのか、と言われればアレですが。-...Coqで型クラス2017年02月09日CoqCoqにも型クラスがあるらしいです。}.これでleというメソッドを持つ型クラスOrdを定義できます。インスタンス定義は以下のように行います。tru...Elmの型関連が弱すぎてつらい2017年02月07日Elminkar-us-i.hatenablog.comここでやたらElm推してるみたいな書き方をしてしまいましたが、僕自身はそんなにElm好きではありません。Elmには型クラスが無いため、まともに多相的な関数を書くことはできません。Elmには至る所でモナディックな処理が出てきます。Maybe.an...Elm始めてみました。2017年02月06日ElmElmという言語を一ヶ月ほど触ってみたので、この言語の特徴などを紹介したいと思います。http://elm-lang.org/この言語はざっくりと言うと、「JavaScriptにコンパイルされる、純粋関数型でHaskellっぽい文法の言語」です。ElmはHaskellと同様に純粋関数型(と通常はみなすことができる)言語です。基...型クラスのインスタンスが複数ある場合の話(Haskell編)2017年01月25日Haskellinkar-us-i.hatenablog.comこちらで出した例はScalaでしたが、Haskellでも同様の問題は起こりえます。parameterによる型クラスの罠2017年01月24日ScalaScalaの型クラスは暗黙引数の受け渡しにより行われるため、スコープごとに同一な型クラスの別なインスタンス実装を使うことができます。以下のような比較を行う型クラス、Cmpを考えてみましょう。これに対して、例えばIntであ...Smith-Waterman法で配列の局所アラインメントを求める2017年01月22日AlgorithmOCaml今度は局所アラインメントを求めます。前回の大域アラインメントと違って、今度は最も一致度の高い部分文字列を求めるアルゴリズムになります。tに欠損記号「-」を挿入して、出来る限り2つの一致度が高くなるように並べたものです。2つの文字列"ABCD"と"ACDE"があったとき、これは1つめの文字列から'B'を削除して末尾に'E'を挿入たものだと考えるのが自然でしょう。この時の2つの文字列のアラインメントは、それぞれ"ABCD-"と"A-CDE"となります。アルゴリズム自体の説明は「Need...OCamlの値の比較について2017年01月20日OCamlOCamlには2種類の値の比較方法があります。これらの演算子は、右辺と左辺が全く同一のオブジェクトであるかを判定します。Pythonのisに近いものです。関数型らしいコードを書く上では使うことはほとんど無いでしょう。Buzzを書いてみました。...Prologでしょぼい型推論器みたいなものを作る2017年01月17日PrologPrologの練習です。以下で定義される簡単な式の型を推論し、その値を評価します。applyの8種類を用意...Prologならではのソートアルゴリズム2017年01月16日Prolog簡単な問題なら問題をPrologの言葉で書いてやるだけで勝手に解けてしまうのが、Prologのすごい所です。ソートに関しても、(計算量とかの話に目を瞑ってしまえば)こんなに簡単に書くことができるようになります。導くためのタクティックが用意されています。(元のゴール)という形に書き換えてくれます。Go...Coqで等式の左右を入れ替える2017年01月14日Coqタイトルの通りです。eq_reflをdestructしていい感じにやるような方法でも解けることは解けます。....Ubuntuで最新のnode.jsを使う2017年01月12日JavaScriptUbuntuの標準のリポジトリに入っているnode.jsがバージョン4.1くらいなので、新しめの文法を使おうとすると割とつらいものがあります。github.comNodeSourceという便利なものをどこかの誰かが用意してくれているので、これを使いましょう。これを使うと各ディストリで好きなバージョンのnode.jsが使えるようになります。Buttonが届きました。そのまま使うのも面白くないので、npmのdash-buttonというライブラリを使ってツイートボタンにしてみたいと思います。dash-buttonはES2015の新文法をバリバリ使っているので、比較的新しめのnode.jsじゃないと動きません。この記事での動作環境は6.9.4ですが、それでもasync...Quineの書き方2017年01月08日Othersinkar-us-i.hatenablog.com前回の記事で書き初めと称してQuineを書きましたが、実は僕自身Quineを書くのは初めてでした。書き始める前はQuineは何をやってるかわからない黒魔術にしか見えませんでしたが、実際に書いてみると意外と楽にできることがわかったので、そのコツのようなものをメモしていきたいと思います。Quineには、大きく分けて2種類が存在します。eval...書き初めQuineを書きました2017年01月06日JavaScript皆様、明けましておめでとうございます。新年早々インフルエンザに罹り、意図せず寝正月を送っていたのですが、そろそろ体調がよくなってきたので書き初めでもしてみようかと思います。5############);p...さよならインクルードガード2016年12月14日Cタイトルは嘘です。いった定型文をおそらく数百回は書いたことがあるでしょう。onceというディレクティブが各処理系により提供されています。onceが書か...JavaでMapの初期化を行う方法いろいろ2016年12月12日JavaJavaの面倒臭さの一つに、Mapリテラルが存在しないというものがあります。Hash...プログラミング初心者が最初に選ぶべき言語73選2016年12月01日Othersこれからプログラミングを始めようとする人にとって、最初の壁となるのが「プログラミング言語の種類が多すぎて、どの言語を勉強すればいいかわからない」ということだと思います。今日はそんなプログラミング初心者のために、選ぶべき言語をたった73種類に厳選しました。入門書を買う時などの参考にしてください。言わずとしれたプログラミング言語。先日OCamlのFunctorという新たな多相性の実現方法を学んだので、せっかくなので各言語のアドホック多相性についてまとめてみたいと思います。クラスとその継承ではなく、アドホックな方法で多相を実現する手段はいくつかありますが、その根本にあるアイデアはすべて同じです。以下では、例としてどの言語でも、「同値比較のできる型tについて、tのリストから...OCamlのFunctorという概念を知らずに自分で再発明していた話2016年11月30日GaucheOCaml最近わけあってOCamlの勉強をしているのですが、OCamlは多相的な関数を定義する方法として、Functorというものを持っています。...機械学習でAV女優かどうかを判定するプログラムを作った2016年11月29日ProductsAV女優判定機タイトルの通りです。機械学習の勉強として作ってみました。bot」のうちどれに最も近いかを判定します。このように、AV女優のIDを入れるとかなりの高確率でAV女優であると判定してくれます。Intelligence』を少しずつ読み始めることにしたので、現在使っているUbuntuにSWI-Prologをインストールすることにしてみました。swi-prolog実行はprologコマンドでできます。^は文字列連結の演算子です。浮動小数点数同士の演算には、元の演算の記号の後にドットが付きます。Schemeと同じですね。:...Gaucheのwriteのバグ(?)を発見した2016年11月24日Gauche全角スペースはwriteでは||で囲われずに普通に表示されるのに、readでは半角スペースと同一の扱いでスキップされます。||で囲わ...nginxで特定のパスを別なポートにリダイレクトする2016年11月20日Linux一般的にはリバースプロキシというらしいです。example.com/playでexample.com:12...apacheのポート番号を変更する2016年11月20日Linuxapacheのポート番号を12345に変えたいとします。</VirtualHost>に変更します。次に、/etc/apa...CGIの仕様2016年11月20日GaucheOthersとある理由からGaucheでCGIとかいう謎なことをしなければならなくなったので、ここにメモしておきます。メソッドは環境変数REQUEST_METHODに保存される。GETパラメータは環境変数QUERY_STRING、POSTのボディは標準入力。GETパラメータがhoge=fugaという形式ではな...ApacheでCGIを動かす2016年11月18日Linux今更CGI、と思うかもしれませんが、諸般の事情によりCGIを実行せざるを得ない状況に陥ってしまったので、ここにその方法をメモしておきます。少なくともUbuntuのapache2では、cgi_moduleはデフォルトでは読み込まれていません。rightを使えばいいと書きましたが、実はこれらのタクティックはもう少し一般的に作られています。xは、xを受け取って残りの命題の証明を返す関数となっています。xは、以下のようなデータ型として定義されています。(A:Type)...Coqで「...かつ...」、「...または...」を扱う2016年11月16日Coq連言「かつ」、選言「または」を表すandとorは、Coqでは次のようなデータ構造として定義されています。P...Coqで定理の証明中に補題を示す2016年11月16日Coqassertタクティックを使うと、証明の途中で他の補題を証明できます。...Coqで前提や定理を適用して証明する2016年11月16日Coqゴールが前提や既にある定理そのものである場合が、証明の一番簡単なパターンです。assumptionを使うと、前提にあるゴールと全く同じ命題をそのまま適用してくれます。Qe...Coqで数学的帰納法を行う2016年11月16日Coq数学的帰納法を行いたい場合は、基本的にelimかinductionのどちらかのタクティックを利用します。こちらが最も基本的な帰納法です。x.とすることで、xについての帰納法を行うことができます。destruct等を使います。caseは普通の条件分岐です。falseである場合の2つに分かれ、それぞれの場合に対して証明を行うことで証明終了となります。...Coqで定理の特定の項だけを書き換える2016年11月15日Coqrewriteやsimplを使って定理を書き換えようとすると、どうしても思ったとおりに書き換えがいかないことがあります。z)))...Coqで既存の定理、定義に従って計算する。unfoldが使えます。simpl.はゴールの式をいい感じに簡単にしてくれるのに対し、compute.はとりあえず式展開します。unfoldは定義の左辺から右辺に書き換えます。...Coqで前提の矛盾から定理を証明する2016年11月15日Coq矛盾を導く方法は何通りかあります。前提にFalseがある場合。前提にFalseがある場合です。Falseの定義は、以下のようになっています。P.してしまえばその瞬間にPのすべてのケースについて...Gaucheで文字列のシーケンシャルアクセス2016年11月13日GaucheGaucheでそこそこサイズの大きい文字列へのシーケンシャルアクセスをしたい場合の注意点です。例として、以下のURLにある『吾輩は猫である』の文書中に、何回「猫」という文字が出てくるかを調べてみましょう。http://www.aozora.gr.jp/cards/...Gaucheでロード時定数を作る2016年11月03日GaucheGaucheには元々ロード時定数という機能はありませんが、マクロを使ってうまいこと頑張ると作ることができます。この位置にある式を保存された値の読み出しに置き換える。(de...Basic認証の方法を理解する2016年11月02日AlgorithmGaucheBasic認証は数あるHTTPの認証方法の中でも最も簡単なものです。(先ほど作った文字列)"をセットするだけです。アホみたいに簡単なので、不慣れなGaucheでも2分くらいで実装することができました。passw...Gaucheでクラスのフィールド名を変数に束縛する。2016年11月01日GaucheHaskellでいうNamedFieldPunsのようなものです。クラスのインスタンスと、スロット名のリストを渡すことによって、スロット名と同名の変数にスロットの値を束縛するマクロを書きました。使用例は記事の下の方にあります。インスタンスexprのスロットslot-name...Schemeと各括弧2016年10月31日Gauche多くのScheme処理系では、角括弧[]が通常の括弧()と同一視されます。この角括弧の使いどころについてまとめてみました。始めに結論から書くと、今後書くSchemeのコードでは、角括弧は使用しない方が良いでしょう。するだけでとりあえず動くようにできたほうが楽な場合はよくあります。Gaucheでそれをやろうとした場合は色々な問題が......。...Gaucheで#を返す2016年10月28日Gaucheジェネレーターを自作する場合なんかに#<eof>を返したくなる場合がありますが、以外とググッても方法が出てきません。R6RSの(eof-object)を使えば簡単に生成できます。(eof-object...Schemeにおける「多値」という概念について2016年10月21日Gaucheinkar-us-i.hatenablog.comこの記事で少しだけ多値について紹介しましたが、この頃はまだよく存在意義がわかっていませんでした。大雑把に説明すると、valuesとかhoge&fuga関数を呼んだ時に値が複数返ってくるアレです。equal?の3種類あるのですが、それらの使い分けが曖昧だったのでまとめてみました。xとyが全く同じオブジェクトであるか(=メモリ上の同じ位置にあるか)どうかを判定します。Pythonのisに近いやつですね。数値の比較結果は処理系依存らしい。#?,の2つの構文が使えるようです。input)":21:(foo...Gaucheでreturn文2016年10月10日Gauchereturn文のようなものは比較的簡単に作れますが、念の為覚え書き。値を返したい位置の継続を受け取って、returnするかわりにその継続に戻り値を渡します。(vector-length...coq-modeとproofgeneralでcoq環境を作る2016年10月05日CoqEmacsでCoqを扱う場合、proofgeneralというものを使うのが一般的らしいです。Ubuntuの場合はどちらもaptのリポジトリに入っているので、上のコマンドを打つだけでインストールは完了です。"/usr/share/emacs/site-lisp/proofgener...Gaucheに継続を「実装」する2016年09月02日Gauche/2016/09/01/200000.htmlinkar-us-i.hatenablog.com上の記事でしっかりしたモナドが作れたので、これを使って継続を実装します。その32016年09月01日Gauche/2016/08/27/200000.htmlinkar-us-i.hatenablog.com上の記事で作ったモナドはグローバルなスタックに現在のモナドを積むというものでしたので、mlet*の終了と同時に現在使用しているモナドに関する情報が消滅してしまい、実際の評価が後で行われるStateモナドのようなモナドを作ることはできませんでした。initした時に「libraryとexecutable、どっちのパッケージにする?」みたいなことを聞かれるので、今まで1つのパッケージにはlibraryとexecutableのどちらか一方しか含むことができないと思っていました。.cabalにlibrary:とexecutable:の両方を書けば、普通に両方を含むようなパッケージも作ることができます。...Pythonにおける弱参照2016年08月30日PythonPythonにも弱参照は存在するらしく、weakrefというモジュールで提供されています。ptr()...stackでプロファイリングを有効にしてビルドする2016年08月29日Haskell以下のようにオプションを渡せば、stackでもプロファイリングを有効にしてビルドすることができます。あと、実行時にも1つハマりどころがあります。ビルドしたバイナリをRTSオプションを付けて...ようやくstackを使い始めた話2016年08月28日Haskellレポートの提出期限間際にcabalの依存関係がぶっ壊れて大変な思いをしたので、ようやく重い腰を上げてstackを使い始めてみることにしました。インストール方法とかはだいたいこの辺を参照しました。その22016年08月27日Gaucheinkar-us-i.hatenablog.comこのときはGauche歴半日くらいだったんで中置演算子とか定義してて微妙な感じの構文だったので、もう少しLispらしいモナドを書いてみました。みたいな謎クオートする人がいますよね。静的単一代入)とは、一つの変数についての代入文がプログラム中で一度しか現れないような書き方のことを指します。Scalaでいうと、すべての変数がvalになっているようなものですね。プログラムをこの形式に変換することによって、データフロー解析がやりやすくなるらしいです。実は、少し前までちょっとした言語処理系を書いていたので(こ...CPS変換についての覚え書き2016年08月24日GaucheCPS(継続渡しスタイル)とは、関数自体に「その後の処理」を引数として渡してしまうような書き方です。...Ook!はSchemeである2016年08月23日GaucheOok!のソースも、括弧で括ればただのS式ですよね。(...Gaucheのコメントいろいろ2016年08月22日Gaucheなんか今更な気もしますが......。セミコロン(;)から行末まではコメントとみなされます。セミコロンの数にも作法があるみたいです。このモジュールはフィボナッチ数を生成するジェネレーターを提供するなんやかんやです。次にくる同じインデン...multi-termで快適なキー操作2016年08月21日Emacsmulti-termで作業してると、「単にシェルとして扱いたい場合」と「シェルの出力を編集したい場合」とでほしいキーバインドが異なる場合があります。....dynamic-wind2016年08月20日GaucheR5RSではdynamic-windという面白い関数が定義されています。dynamic-windはまずbeforeを呼び出し、その次にthunkを、最後にafterを呼び出します。試しに以下のようなプログラムを実行してみましょう。みたい...Gaucheで手続き以外のオブジェクトも呼び出し可能にする2016年08月18日Gaucheobject-applyというメソッドを定義すると、手続き以外の任意のデータ型をあたかも関数であるかのように呼び出すことができます。以前...Gaucheでパラメータを定義する2016年08月17日GaucheGaucheには、グローバル変数の代わりに使用できるパラメータというオブジェクトが存在します。典型的な使い方としては、特定の関数が使用するデフォルトの値を設定する場合などに使えます...Gaucheで優先度付きキュー2016年08月16日GaucheGaucheの練習。実は何気に優先度付きキューの実装は初めてだったので、ツリーを配列で管理したほうが楽ということを知らずに若干手こずりました。:init-key...Gaucheでリスト内包表記2016年08月15日Gauchesrfi-42には、リスト内包表記に関するマクロが定義されています。i...パターンマッチでTextを1文字ずつ処理する2016年08月14日HaskellPatternSynonymsのいい感じの実用例が思いついたので。このパターンを定義することで、先頭文字がcで残りがcsである...Gaucheで構造体を定義する2016年08月13日Gaucheクラスほど大したことをしなくても良い場合、define-record-typeというマクロを使うことでより簡単な構造体を定義することができます。=&...Gaucheで関数の実行時間を測定する2016年08月12日Gauchegauche.timeのtime-this関数を使うと、指定した関数の実行にどれくらい時間がかかるのかを測定することができます。例として、クラスを使った場合と、ベクタを適当にラップした型に対してアクセスするのとで、どの程度実行に差が出るのかを調べてみたいとします。(def...Pythonで代数的データ型とパターンマッチ2016年08月11日PythonPythonでHaskellっぽい代数的データ型とパターンマッチをできるようにするためのメタクラスです。これも余り用途はなさそうですけど。in...Pythonでsealedクラス2016年08月10日Pythonとくに意味も用途もないけど何となく思いついたので作ってみました。sealedクラスとはScalaの機能で、別モジュールからの継承をできなくさせる機能です。meth...Gaucheで多値を受け取る2016年08月09日Gauche複数の値を返す場合、それらの値をリストやペアにしてもよいのですが、通常、Schemeでは多値というものを利用します。このmin&maxは、与えられた引数のうち最小値と最大値を返す多値関数です。他にも、商と余りを返すquotient&remainder等もあります。(quotient&remai...ImplicitParamをConstraintとして扱う2016年08月08日Haskell=>の左側に来るものはすべてConstraintなので、暗黙引数をConstraintとして扱うこともできます。a...Gaucheでデータ型の簡単な表現を定義する2016年08月07日Gauche例として、以下のようなクラスを用意します。このようなクラスのインスタンスを作成してみます。img/*.pngのように記述すると、dirname以下のdata-filesに指定したファイルがインストール時にコピーされます。realpath...Gaucheでパーセプトロンを作った2016年08月05日GaucheGaucheの練習。パーセプトロンは簡単に作れる割に何となく学習してくれた感があって面白いです。let2016年08月04日GaucheGauche(に限らずほぼすべてのLISP)では、letは次のようなシンタックスシュガーとなっています。hoge...Gaucheにおけるモナド的パターン2016年08月03日GaucheMaybeモナド的なパターンはand-let*を使うことで処理することができます。...Gaucheでn-queen問題2016年08月02日GaucheGaucheの練習。任意のnに対してn-queen問題を総当りで解きます。queenがqueensのうち、1つでも取れるものがあ...Gaucheでパターンマッチ2016年08月01日Gaucheutil.matchモジュールを使えば、GaucheでもHaskellのようなパターンマッチを行うことができます。リテラルに対するパターンは、そのリテラルを直接書けばOKです。...ジェネリック関数を定義する2016年07月31日GaucheGaucheでは、アドホックに多相を実現する手段としてジェネリック関数が用意されています。...Gaucheでクラスの作成2016年07月30日GaucheどうやらGaucheにもクラスは存在するようで、継承やアクセサの設定など、基本的なクラスに関する操作は行うことができます。&...Gaucheでハノイの塔2016年07月29日GaucheGaucheの練習。n個のハノイの塔の解き方を表示するプログラムです。各板の大きさは数値として表され、数値が大きい方が大きい板となっています。見やすさのため表示する際はリストの逆順(右のほうが塔の上側)となっています。n個のハノイの塔の解き方を表示する。termのシェルの色をテーマに合わせる2016年07月16日Emacsまずはテーマの配色を調べます。テーマのソースコードがあったので、まずはそれを開いて配色を確認します。(let...型クラス自体を型として扱う2016年07月14日HaskellConstraintKinds拡張を使うと、型定義の=>の左辺にくる制約そのものを型として扱うことができるようになります。MyS...継続でモナド2016年07月13日GaucheHaskellの>>=は実質継続渡しみたいなものなので、継続をうまいこと使えばSchemeにもモナドが実装できるはず(?)とりあえずMaybeモナドを実装してみました。...モナドで擬似マルチタスク2016年07月12日Haskell継続のことばかり考えていたらなんとなく思いついてしまったので載せておきます。...Emacs24.4以降でmulti-term.elを動かす2016年07月11日EmacsそろそろシェルもEmacs上で動かそうかなと思い立ったのでmulti-term.elをインストールしてみましたが、実行すると以下のようなエラーが発生して動きませんでした。ad-advised-definition-pはEmacs24.4で廃止されたらしいので、自...Emacsで快適なウィンドウ操作を行う2016年07月08日EmacsEmacsのウィンドウ周りが結構不便だったので、いい感じに簡単に操作できる関数を書いてみました。(s...Scheme始めました2016年07月04日Gauche某友人の影響でLispに目覚めてしまったので、とりあえずGaucheの勉強を始めることにしました。IsList型クラスはGHC.Extsで定義されており、以下のような定義になっております。f...独自のkindを定義する2016年06月19日HaskellDataKinds拡張を有効にすると、独自のkindを定義することができるようになります。Sが、それぞれkindと型コンストラクタに「昇格」します。Nat)からなる新た...Haskellで独自のパターンを定義2016年06月18日HaskellScalaではunapplyメソッドを定義することにより独自のパターンを定義できますが、実はHaskellでも似たようなことができます。PatternSynonyms拡張を有効化することで、既存のパターンについてのエイリアスのようなものを定義することができます。この拡張を...Scala的な型クラスをHaskellで作る2016年06月17日HaskellScalaの型クラスはHaskellの型クラスとは全くの別物ですが、HaskellでもImplicitParams拡張を使うことによってScalaの型クラスのようなものを利用できるようになります。このマイナーな拡張を有効化すると、関数に対して暗黙的に引数を渡すことができるようになります。暗黙引数を受け取る関数は以下のように定義します。...gunfoldの型を読み解く2016年06月15日Haskellまず最初に、Data型クラスのその他のメソッドについて見てみましょう。toConstrは、値から値コンストラクタの情報を得るための関数です。isChi...Data.Dataのgfoldlの型を読み解く2016年06月14日HaskellData.Data.Data型クラスを使うと、Typeableと同様に非常に一般的な関数を書くことができるようになります。前回のTypeableは値の型情報を取得するだけでしたが、Dataのメソッドを用いると代数的データ型の任意のフィールドにアクセスするといったようなことができるようになります。DataもDeriveDataTypeable拡張を利用することにより、任意の型に対してderi...Typeableを使ってみる2016年06月13日HaskellData.Typeable.Typeableを使うと、TemplateHaskell無しでも非常に一般的な関数を書くことができるようになります。型クラスData.Typeableのインスタンスは、typeOfという関数を使うことによって型情報を取得することができます。x」という形でそのメソッドへのアクセスができます。TaskとService2016年03月01日ScalaJavaFXでは別スレッドで作業を行うためにTaskとServiceという2つのクラスを提供しています。...SBTで外部のプライベートGitリポジトリを参照する2016年02月29日ScalaSBTには、Mavenリポジトリに登録されていないようなプロジェクトも依存関係に追加することができるという便利機能があります。).dependsOn(uri("git://some-git-repository.com...独自パターンマッチを定義する。unapplySeqメソッドを定義することによって、任意の型に対して独自で後付けのパターンマッチを定義することができます。今回はこれらの違いについてメモしておきます。これが一番一般的な定義の方法です。Scalaでは全てのクラスはAnyのサブクラスとなります。そのため、任意のAny型の変数には任意の型の値を代入することができます。Anyのサブクラスとして、任意のプリミティブな値を表す型であるAnyValと、任意の参照型を表すAnyRefの2種類が存在します。Nullは全ての参照型のサブクラスであり、単一の値nullのみを持ちます。scalafx...ScalaFXでデフォルトのCSSが見当たらない2016年02月24日ScalaScalaFXの練習として、とりあえず公式にあるサンプルを写経していた所、次のような現象に遭遇しました。問題になったコードは以下の通り。下記のサイトのコードそのままです。具体的な実装を持たないようなクラスをScalaではtraitと呼びます。Javaでいうinterfaceのようなもの。classが「それが何であるか」を指定するのに対し、traitでは「それがどういった振る舞いをするか」を記述するためにあると思っています。J...ScalaFXを触ってみる2016年02月23日ScalaScalaFXについてのまとまったドキュメントが見当らないので(JavaFXのドキュメント見ろってことなのかな?)、ScalaFXに触っていく過程で分かったことを少しずつ書いていこうと思います。World!」と書かれたウィンドウを表示するプログラムです。sc...VagrantでWordPress環境を手軽に構築2016年02月22日WordPressVagrantというものを使うと、設定ファイルに記述された構成の仮想マシンを簡単に構築することができます。これを使うことで、例えば本番環境と同様の構成のテスト環境を用意したり、ということが簡単にできるようになります。Consoleにログインします。Manager」から行います。`';''2016年02月21日PHP先ほど友人が引っかかってたエラーです。エラーの内容自体は大したことないものですが、恐ろしくググラビリティが低そうなのでこちらに纏めておきます。`','...JavaにOptionalは必要だったのか2016年02月20日Java大学の授業で初めてJavaに触れて思ったことです。Javaに関しては全くの初心者なので、見当違いのことを言ってたらごめんなさい。Interface(訳語は関数型インターフェース、かと思いきやコンパイラ内のメッセージでは機能インターフェースとか呼ばれていたりするのでよく分からない)という機能...PHPの文字列が無駄にお節介を焼きすぎて怖いという話2016年02月20日PHP最近必要に迫られてPHPを触りはじめました。WordPressプラグインとか作れるようになりたいですね。実行すると、「ほげ」と出力されます。...SBTのインストールから、簡単なプロジェクトができるまで2016年02月17日ScalaバイトとかでScalaに触ったことはあるけど、そういえば自分で1からプロジェクト作ったことは無かったなぁと思ったので。各々の環境に合わせて。僕はMacなんでbrew使いました。打てばとりあえず対話型実行環境を作ってくれますが、実行するとカレントディレ...pyenvで入れたpythonでwxPythonが動かない2015年11月10日PythonwxPythonで作ったGUIアプリを動かしてみようとした所、次のようなエラーが。APIを使ってみました。以下のサイトにアクセスします。「pyenv」なる便利コマンドで簡単にバージョンの切り替えを行うことができるようです。コマンドは環境に応じて適宜読み替えてください。インストール完了後に...Twitterのふぁぼマークを寿司にする2015年11月04日TwitterTwitterのふぁぼマークがハートになってしまったので、昔ながらの寿司アイコンに戻す方法を書いておきます。StylebotというChromeの拡張機能をインストールします。https://chrome.google.com/webstore/detail/stylebot/oiaejidbmkiecgbjeifoej...にマッチする記事はありません。