プログラミング

こわくない Idris (3)

ハロー、依存型プログラミングの世界 (3) 依存ペア 依存ペア dependent pair とは、ある値と、その値に依存した型を持つ値のペアのことだ。 data Exists : (a : Type) -> (P : a -> Type) -> Type where Ex_intro : {P : a -> Type} -> (x : a) -> P x -> Ex…

こわくない Idris (2)

ハロー、依存型プログラミングの世界 (2) データ型の宣言 代数データ型を宣言する場合には、Haskellと同様の記法を使うことができる。HaskellでもおなじみのEitherやListの宣言はidrisではこうなっている。 data Either a b = Left a | Right b data List a …

こわくない Idris (1)

はじめに Idrisという、Haskellに似ていて、依存型 dependent type を持っている言語がある。依存型を持った言語なんて他にもあるのだけれども、Idrisは general purpose を謳っている。わざわざ汎用って謳っているあたり、依存型ってのはもっと色々に使える…

haxe.Utf8の非互換性

次のコードの出力を各プラットフォームで比較する。(現時点のGitHub上にある開発版を使う。) import haxe.Utf8; class Hello { public static function main() { trace("あ𠀀い"); trace("あ𠀀い".length); trace("あ𠀀い".charCodeAt(1)); trace("あ𠀀い".c…

Rust 0.7

前回: Rust 0.4 - M59のブログRust 0.7 向けに書きなおし。 // for Rust 0.7 extern mod extra; use sort = extra::sort::quick_sort; fn main() { let (port, chan) = stream(); let chan = std::comm::SharedChan::new(chan); for std::uint::iterate(0, 1…

Pixilang マニュアル (英語) PixilangV3Manual - pixilang - Simple programming language for small graphics/sound applications and experiments - Google Project Hosting

ピクセル指向プログラミング言語 Pixilang (3)

アニメーション グラフィックスを動かしてみる。 while 1 { t_rotate( 1, 0, 0, 1 ) clear() dot( 0, 0, WHITE ) line( 0, 100, 100, 0, ORANGE ) box( -100, -100, 50, 100, RED ) fbox( 100, -100, 100, 50, #ffeecc ) frame() while get_event() { if EVT…

ピクセル指向プログラミング言語 Pixilang (2)

Pixilang入門の下書きみたいなものだと思ってください。 エラー プログラムに間違いがあると、エラーになることがある。 たとえば、次のプログラム while 1 { print( "Hello, world! ) frame() while get_event() { if EVT[ EVT_TYPE ] == EVT_QUIT { halt }…

ピクセル指向プログラミング言語 Pixilang

Pixilangは、小規模なグラフィックス・サウンドアプリの作成や試作に向いた「ピクセル指向」プログライング言語だ。処理系がMIT Licenseのもとで公開されている。グラフィックスやサウンド処理に便利な機能が最初から用意されているし、しかもクロスプラット…

函数論理プログラミング言語 Curry

Curryはfunctional logic programming languageという聞きなれないカテゴリーに属する言語だ。もっとも、函数型プログラミングと論理型プログラミングは似通った点もあるから、そのふたつのパラダイムを併せ持ったプログラミング言語が存在するのはそんなに…

LibreLogoを使う

Ubuntu 13.04 (Raring Ringtail) で入る LibreOffice 4.0 には、ロゴで図形を描画する機能がある。 Raring リポジトリから必要なパッケージをインストールする。 $ sudo apt-get install libreoffice-script-provider-python libreoffice-librelogoそしてLib…

プログラミング言語 Proxima

id ::= \x -> x pred ::= succ \x -> x Nat ::= zero | succ Nat nat \z \s ::= zero -> z | succ \n -> s (nat z s n) Nat + Nat :: Nat \x + \y = nat x succ y Nat - Nat :: Nat \x - \y = nat x (pred | id) y

asm.js is 何

解説記事じゃないですし、内容は保証しません。 asm.js は低レベル言語 仕様書[1]によれば、asm.jsはJavaScriptの厳密なサブセットであって、コンパイラーの低レベルで効率的なターゲット言語として使うことができる言語だ。 This specification defines asm…

3DCGスクリプト言語案 save obj > "alpha.obj" let $cube = load obj < "cube.obj" for $r1 $r2 in load csv < "value.tsv" begin translate 5 0 0 rotate $r1 0 0 1 model $cube end begin translate -5 0 0 rotate $r2 0 0 1 model $cube end

ラムダ++

#include <iostream> int main() { for (int i = 0; i < 10; ++i) { auto x = [=](){ return i; }; std::cout << x() << std::endl; } } prog_cpp$ g++ -std=c++0x hellolambda.cpp prog_cpp$ ./a.out 0 1 2 3 4 5 6 7 8 9 prog_cpp$</iostream>

ラムダラムダ

TypeScriptは ()=> で Java8は ()-> なのか。辛い。2013-03-12 13:58:59 via SoraUsagi C++ [](int x) { return x > 0; } Python lambda x: x > 0 Ruby -> x { x > 0 } Haskell \x -> x > 0 C# x => x > 0 CoffeeScript (x) -> x > 0

Bool ::= False | True Nat ::= O | S Nat Maybe a ::= Nothing | Just a Not :: Bool -> Bool Not = False -> True | True -> False Match :: _ -> _ -> Bool Match a = a -> True | _ -> False Pred ::= S (x : Nat) -> x

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言語などで書かれたライブラリを、簡単な宣言で呼び出すことができる。 変数には型がないが、データの…

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

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

名前の話(仮)

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

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)…

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

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