2013-02-01から1ヶ月間の記事一覧
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 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)…
codataを使うと、無限ストリームが作れる。codata型のコンストラクターは遅延評価され、またcodata型を返す関数はコンパイル時に簡約されない。 module Main codata Stream a = (::) a (Stream a) iterate : (a -> a) -> a -> Stream a iterate f a = iterat…
Idris http://idris-lang.org/ は依存型を持つ純粋関数型言語。C言語経由でネイティブコードを生成する他、JavaScriptコードの生成もできるようだ。*1cabalを使ってインストールする。 cabal update; cabal install idrisハローワールドのソースコード。Idri…
遅延評価をまねる 厳密に言えば、遅延評価は式の評価戦略 evaluation strategy のひとつだ。JavaScriptとかLuaは正格な評価を行い、Haskellは非正格な評価を行う。正格な言語で非正格評価を真似る方法のひとつに、引数をすべてクロージャーでくるみ、使うと…
前回、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年 「非ノイマン型 プログラミング言語の実験の為に設計された。」
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…
昨日の続き。 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…
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は右の…