komorebikoboshiのブログ

プログラミング記事(趣味レベル)が多め。

プログラミング

F#でズンドコした改造版

let zundokoSeq = seq{ let rand = new System.Random () while true do let x = rand.Next(2) (* 0がズンで1がドコ *) if x = 0 then printfn "ズン" else printfn "ドコ" yield x } zundokoSeq |> Seq.windowed 5 |> Seq.takeWhile (fun x -> x = [|0;0;0;…

F#でズンドコした

今更感あるけどF#でズンドコした。 type Zundoko = Zun | Doko (* F# 4.0より前のバージョンの場合 let rand = new System.Random () *) let rand = System.Random () let randomZunDoko () = if rand.Next(2) = 0 then printfn "ズン"; Zun else printfn "…

F#で謎カウンターを作るとき、let mutableでなくrefを使う(使っていた)のはなぜ?

これはF# Advent Calendar 201419日目のエントリーです。前日のエントリーはid:u_1rohさんの継続は力なり #FsAdvent - かたちづくりでした。 さて、タイトルに謎カウンターなる謎の言葉が出てきますが、クロージャについて調べたことのある人はなんとなくピ…

VS2013でFsYacc、FsLexを使う

Visual Studio 2013*1でFsYaccとFsLexを使うには、基本的に http://stackoverflow.com/questions/19781156/using-fslex-yacc-in-vs2013 の通りにすればいいのですが、2つほどハマったところがあったのでそれを書いておきます。 FsYacc、FsLexが参照するFShar…

Common LispでBMIを求めてみる

基礎プログラミング演習(1) - 技術memoのBMIを求める問題をやってみました。せっかくなのでよく知らないプログラミング言語を使ってみようと思い、また、最近On Lispを読み始めて興味がわいていたのでCommon Lispを使ってみることにしました。 演習問題1 と…

FParsecでパーサコンビネータのお勉強

はじめに この記事はF# Advent Calendar 2013の18日目のです。ひとつ前の記事は@kos59125さんのDeedle で遊ぼう - 捨てられたブログです。 パーサコンビネータとは 文字列の構造を解析するプログラムをパーサと言いますが、パーサコンビネータはその中の一種…

PowerShellの関数の引数を補完する

PowerShellでこんな関数を書いたとして function Jump-Location{ param($Target) $jumpList = @{"SendTo"=([Environment]::GetFolderPath("sendto")); "StartUp"=([Environment]::GetFolderPath("startup"))} Set-Location -Path $jumpList[$Target] }こんな…

新しめのHaskellでWhitespaceをコンパイルする

プログラミング言語Whitespaceの本家サイトからHaskellで書かれたインタプリタのソースコードがダウンロードできますが、これをDownload Haskellから手に入れた最新のGHCでコンパイルしようとしても、なんかエラーが出てコンパイルできないですよね。そんな…

Seq.existsのお話

えーと、SORAHANEの次回作のティザーサイトが公開されましたね。 SORAHANE -ソラハネ-(リンク先18禁) とりあえず英語苦手なんで日本語情報を待ちます(お まだおまけシナリオやり終えてないんだよなあ。 それはおいといて。 F#にはSeq.existsという*1「シ…

数学の「群」がインターフェースに見えた

前に数学ガールを読んでいるってことを書いたけど、その中で群というものが出てくる。 群の定義(群の公理) 以下の公理を満たす集合を群という。 G1 演算*に関して閉じている。 G2 任意の元に対して、結合法則が成り立つ。 G3 単位元が存在する。 G4 任意の…

F#のfunction式への苦手意識が少しなくなったかもしれない

F#のmatch式、便利ですね! let rec fib n = match n with | 0 -> 0 | 1 -> 1 | x -> fib (x - 1) + fib (x - 2) こんな感じでパターンマッチが簡単に書けます。 さて、match式とよく似たものにfunction式というものがあります。 let rec fib = function | 0…

学ぶ!コンピューテーション式(3) ~return、return!

とりあえず分かるところから。 はじめに この記事はコンピューテーション式の解説記事ではありません。以下学ぶ!コンピューテーション式(1) ~let!とBind - komorebikoboshiのブログと同文です。 本編に入る前に このブログにもコメントしていただいたこと…

Javascriptでプログラミング言語Grassを実装してみた(限定版)

Javascript(JScript)でプログラミング言語Grassを実装してみました。ちなみに限定版というのは機能限定版という意味です。

動機の変化

一年前のコメントに返信しつつ思ったのが、その頃と今とではプログラミングをする目的が違うなあ、と。前は何かを作ることが目的で、そのためにプログラミングを勉強していたけど、今ではプログラミング(計算機科学)を深く知ることそれ自体が目的になった…

学ぶ!コンピューテーション式(2) ~そもそもコンピューテーション式ってなに?

はじめに この記事はコンピューテーション式の解説記事ではありません。以下学ぶ!コンピューテーション式(1) ~let!とBind - komorebikoboshiのブログと同文です。 コンピューテーション式とは 式です。 ……というボケで終わるわけにはいかないのですが。こ…

学ぶ!コンピューテーション式(1) ~let!とBind

はじめに 最初に御注意を。 このエントリーはコンピューテーション式の解説記事ではありません。komorebikoboshiがコンピューテーション式について勉強して、考えたことを書き留めていく記事になる予定です。よってところどころに間違った内容が入る可能性が…

「モナドのすべて」のMaybeモナドの例をF#で

All About MonadsにはMaybeモナドのサンプルとしてクローン羊の例が載っています(http://www.sampou.org/haskell/a-a-monads/html/meet.html#example1)。これをF#で書いてみました。もうすでに誰かやってるとは思いますが。 普通にやる まずSheep型を定義…

継続渡しに対する誤解

継続渡しについてひとつ誤解していたことがあって、それが理解を妨げていた。 それが何かというと、 (define (k+ a b k) (k (+ a b))) (define (k* a b k) (k (* a b))) Scheme 入門 16. 継続 からの引用だけど、誤解というのはこのk+やk*といった関数が+や*…

最近読んでいる本

図書館でこの本を借りてきた。 コンピュータサイエンス入門〈1〉アルゴリズムとプログラミング言語作者: 大堀淳,ジャックガリグ,西村進出版社/メーカー: 岩波書店発売日: 1999/05/24メディア: 単行本 クリック: 10回この商品を含むブログ (3件) を見る 興味…

F#の文字列操作関数を調べてみた

F#の文字列操作関数(Microsoft.FSharp.Core.Stringモジュール)を調べてみた。 関数 length 文字列の長さを返す。 String.length "あいうえお" (* => 5 *) map 文字それぞれに関数を適用した新しい文字列を作る。 String.map (fun x -> System.Char.ToUpper…

F#がおもしろそう

最近急にF#が気になりだした。スクリプトとして実行できるから.NET Frameworkが使えるWSHのような感じで使えないかなぁ。

Windows7 64bitでirb.batが異常に重い時

PCを新しくしてからRubyの対話環境irb.batが異常に重くなったので、その解決策っぽいもの。 どうもruby.exeが32bit版なのにbatファイルを実行するコマンドプロンプトが64bit版なのが問題らしい。 そこで、C:\Windows\SysWOW64\に32bit版のcmd.exeがあるので …

Javascriptの関数を表示したい

例えば、 function increment(x){ return x + 1; } という関数があったとして、 alert(increment(1) ); は当然2が表示される。で、Javascriptの関数とは普通の変数にFunctionオブジェクトが代入されたものらしいので alert(increment) とすることもできる。…

Pyzo

そろそろPythonにも手を出すかー、っと思って半日いろいろやってた。IPythonをインストールしようと思ったんだけどうまくいかない。いや、IPythonはインストーラーで楽々なんだけど、PyReadlineを読み込んでくれない。(入れたのに!)で、半日格闘してこう…

メモ・バッチファイルのスーパーpre記法

2012-07-05 - うおっ ちなみにスーパーpre記法で bat のハイライトは dosbatch を指定するとできる。 こんなの気づかないよ!ってのはWindows XPから本格的にPCを触り始めた人間だからだろうか。

ちょっと止まって、消えてほしい。

昨日のエントリーにも関連するのでだけど、例えばRubyでHello,Worldを書いたとして、ruby.exeが関連付けられている.rbファイルをそのまま実行しちゃダメで(一瞬でコンソールが消えるので見えない)、 cmd /k ruby.exe HelloWorld.rbとコマンドプロンプトを/…

MeryWikiのマクロライブラリに投稿しました。

Meryのマクロ、ではないのですがライブラリのよーなものを書きました。 ポップアップメニューを手軽に扱う - MeryWiki MeryWikiはMediaWikiなんですね。ページにヘルプが見つからなくて最初は記法が分からなかった。 以下裏話的なもの 簡単な使い方 var x = …

Pythonが苦手なワケ

Rubyなどと比べてPythonにはなんとなく苦手意識を持っていたけど、それは多分、ブロックを閉じる時にキーワードや括弧を書かないからだろう。 ブロックをインデントで表すのは読むと非常に分かりやすいけど、書く時には本当にブロックが閉じられているのか不…

PATHの通ったフォルダにある名前が重複したファイルを探す

まえおき プログラミングの解説書には最初のほうに大抵、「環境変数PATHに"~\bin"を追加しましょう」と書かれています。また、CUIアプリケーションのreadmeには「インストールフォルダをPATHに追加しておくと幸せになれるかも」とか書かれてることも多いです…

#includeなしでCプログラミング

こんな感じ? test.c int main(int argc,char *argv[]) { int ret = 0; int i; int stoi(char *s); for(i = 1;i < argc;i++) { ret = ret + stoi(argv[i]); } return ret; } int stoi(char *s) { /*文字列を整数に。関数名がひどい*/ int i = 0; int r = 0; …