2013-02-01から1ヶ月間の記事一覧

send more money

import Control.Monad import Control.Applicative digit :: MonadPlus m => m Int digit = msum $ map return [0..9] exps :: Num a => [a] exps = map (10 ^) [0..] number :: Num a => [a] -> a number = sum . zipWith (*) exps . reverse uniqueDigits …

blockly - A visual programming editor - Google Project Hosting ..::CLAM::.. C++ Library for Audio and Music

明日からがんばる。

文字っ子が集った。

もっと色々なプログラミング言語を調べて比較してみよう

項書き換えに基づく関数型プログラミング言語 Pure

Pure Programming Language デフォルトは正格評価。指定すれば遅延評価も使える。 副作用を許容する。 バックエンドにLLVMを使っている。 C FFIを持つ。C言語などで書かれたライブラリを、簡単な宣言で呼び出すことができる。 変数には型がないが、データの…

7.3. 構文的拡張 Haskellの色々な構文的拡張。(ライブラリじゃなくてコンパイラへのオプションで構文を拡張するのってどうなんだろう……)

SVGじゃなくてWebFontで地図を頑張った URL らしいけどFirefoxならOpenTypeフォントにSVGを入れる仕様 URL を書いて実装してたりするよ URL2013-02-18 15:03:53 via Echofon Well, I'm Back: SVG In OpenType: A New Approach To SVG Fonts こんなの実装され…

プログラミングパラダイムについて何か書こうと思ったけど挫折。

「プログラミング自体が楽しい」って、どうなんだろう。プログラミングするためにプログラミングしているなんて、じゃあ結局なにをやったのかを説明するときに困る感じする。「これを作りたい」って情熱があってプログラミングしている人と比べたりすると、…

できていないパーサーの作り直し。演算子の数を増やす。関数型言語のように、自由に定義できるようにする。

名前の話(仮)

名前の管理はプログラミングにおいて大きな問題だ。名前は恣意的に付けることができるが、異なるものには異なる名前を付けないといけない。限られた名前を管理して、名前の衝突を避けなければならない。しかしあらゆるものを固有名で呼ぶこともできないから…

module Free data Free : (Type -> Type) -> Type -> Type where Pure : a -> Free f a Impure : f (Free f a) -> Free f a bind : Functor f => (a -> Free f b) -> Free f a -> Free f b bind k (Pure x) = k x bind k (Impure x) = Impure (fmap (bind k)…

Idrisで無限ストリーム

codataを使うと、無限ストリームが作れる。codata型のコンストラクターは遅延評価され、またcodata型を返す関数はコンパイル時に簡約されない。 module Main codata Stream a = (::) a (Stream a) iterate : (a -> a) -> a -> Stream a iterate f a = iterat…

依存型を持つ純粋関数型言語 Idris

Idris http://idris-lang.org/ は依存型を持つ純粋関数型言語。C言語経由でネイティブコードを生成する他、JavaScriptコードの生成もできるようだ。*1cabalを使ってインストールする。 cabal update; cabal install idrisハローワールドのソースコード。Idri…

CoffeeScriptで遅延評価(もどき)を実装しよう

遅延評価をまねる 厳密に言えば、遅延評価は式の評価戦略 evaluation strategy のひとつだ。JavaScriptとかLuaは正格な評価を行い、Haskellは非正格な評価を行う。正格な言語で非正格評価を真似る方法のひとつに、引数をすべてクロージャーでくるみ、使うと…

Coq 帰納法と余帰納法

前回、iterateとtakeを定義した。 Require Import List. Require Import Coq.Lists.Streams. Section MyStreams. Variable A : Type. CoFixpoint iterate (f : A -> A) (x : A) : Stream A := Cons x (iterate f (f x)). Fixpoint take (n : nat) (s : Strea…

ビジュアルプログラミング言語作りたい。色々調べる。ビジュアルプログラミング言語 - Wikipediaデータフロープログラミング - WikipediaLucid (プログラミング言語) - Wikipedia 1976年 「非ノイマン型 プログラミング言語の実験の為に設計された。」

無限リストと証明じゃないCoqの話

Haskellではじめて無限リストのコードを見たときはとても驚いた。遅延評価など知らないから、どうみても無限ループに陥りそうなプログラムがちゃんと動いているのが不思議だった。無限に続くデータさえ表現できる遅延データ構造はとても強力だ。大量のデータ…

融合変換の勉強しないとなー

遅延リストで素数

Prime numbers - HaskellWiki から移植。 -- from www.haskell.org/haskellwiki/Prime_numbers minus = (X, Y) -> return X if Y\empty! x, xs = X\head!, X\tail! y, ys = Y\head!, Y\tail! if x < y Sequence\ConsDelay (-> x), Delay -> minus xs, Y else…

Lua/MoonScriptで部分関数

昨日の続き。 util = require 'util' import Function, Switch, Case, Delay, List, Array, Sequence from util _ = util.it require 'std' print '# Function combination' print "(_ + 5 .. _ * 2)(1) ==> #{(_ + 5 .. _ * 2)(1)}" print '# Partial funct…

Lua/MoonScriptで遅延リスト

MoonScriptで遅延リストを実装した。 list = require 'list' import Function, Delay, List, Array, Sequence from list require 'std' local fib fib = Sequence\Table({1, 1})\appendDelay -> fib\zipWith op['+'], fib\tail! nat = Sequence\iterate (=> …

何でも無限リスト

純Lispにはアトムとリストがあるけど、アトムを無くして、なんでも無限リストにしたらどうだろう? 今までアトムだと思っていたものは、実はリストだったのだ。 なんでもリストだから、carとcdrは何にでも適用できる。carは左のリストを取り出し、cdrは右の…