てきとうなメモ

本の感想とか技術メモとか

Erlang

CEAN

http://cean.process-one.net/ ErlangのCPAN.erlangの環境と一緒にインストールされる.こんな感じでパッケージをインストールできる. $ cd cean $ start.sh Erlang (BEAM) emulator version 5.5.4 [source] [async-threads:0] [hipe] [kernel-poll:false]…

process dictionary

erlangはプロセスごとにディクショナリを持っている.putで値をいれ,getで取得し,eraseで消す. 1> put(foo, {1, 2, 3}). undefined 2> put(bar, "hoge"). undefined 3> get(foo). {1,2,3} 4> get(bar). "hoge" 5> get(). [{foo,{1,2,3}},{bar,"hoge"}] 6>…

FizzBuzz

どうしてプログラマに・・・プログラムが書けないのか? Perlだとすぐ書けそうなので,勉強中のErlangで書いてみた. -module(f). -export([fizzbuzz/0]). fizzbuzz() -> lists:foreach(fun(X) -> io:format("~p~n", [fizzbuzz(X)]) end, lists:seq(1, 100)).…

ガード

ガードが真であるときにbodyが実行される.when ...で指定する.例えば,絶対値を求めるabs/1は以下のように定義できる. abs(N) when N >= 0 -> N; abs(N) -> -N.

if

ガードで指定しなくてもifで条件分岐できる abs(N) -> if N >= 0 -> N; true -> -N end. 構文は if Condition1 -> Expr1; ... ConditionN -> ExprN end

Case

パターンマッチの条件分岐もCaseを使って右辺に書くことができる.構文は case Expr of Pattern1 -> Expr1; ... PatternN -> ExprN end これでqsortを書き換えると, qsort(List) -> case List of [] -> []; [Pivot|Rest] -> qsort([X || X <- Rest, X =< Pi…

funと高階関数

funを使うと無名関数を作ることができる. 4> F = fun(X) -> X+1 end. #Fun<erl_eval.6.72228031> 5> F(1). 2 6> F(2). 3これを使って高階関数を書くことができる.例えばqsortに比較関数を指定できる. qsort([], _) -> []; qsort([Pivot|Rest], Func) -> qsort([X || X <- Rest,</erl_eval.6.72228031>…

数値

integerとfloatがある. 1> 42. 42 2> 3.14. 3.14000$で文字charの値 3> $A. 65 4> $a. 97 5> $\t. 9base#numberでbase進数のnumberの値.別に2,8,16進数に限っていない. 6> 2#1111. 15 7> 8#777. 511 8> 3#10. 3 9> 16#ff. 25536進数で止まった. 12> 36#1…

アトム

reference manualによると. An atom is a literal, a constant with name. いまいち理解していないし,説明しにくい.フラグとかに使われている.''で囲まれた文字列か,[a-z][\w@]*の形式をとる文字列がアトムになる.ので,以下の物はアトム. foo foo_ba…

Boolean

ErlangにはBoolean型はなく,trueとfalseというアトムのみ存在する.and,or,xor,notの論理演算子を利用できる. 1> true. true 2> false. false 3> true and true. true 4> true and false. false 5> true or false. true 6> false or false. false 7> true …

タプル

複合データ型.各要素へのアクセスは速い.リテラルは{}で囲まれた要素で表現する. 構造体を表現するのに利用される. 23> T = {"john", 23, male, {jan, 6}}. {"john",23,male,{jan,6}}BIF(built-in function)としてelement, setelement, sizeなどがある.…

リスト

複合データ型.各要素へのアクセスは遅い.[]で囲まれた要素で表現する 27> [1,2,3,4,5]. [1,2,3,4,5]prologみたく[|]でheadとtailを表す.[|]は2項演算子でconsと呼び,[]は定数でnilと呼ぶらしい. 6> [1 | [2 | []]]. [1,2]BIFとしてhd, tl, sizeなどがあ…

文字列

文字列は""で囲む 30> "erlang". "erlang"文字列は文字(数値)のリストなんで以下のように表現できる. 31> [$e, $r, $l, $a, $n, $g]. "erlang"リストなんで連結可能 32> "hello, " ++ "erlang". "hello, erlang"

比較演算子

通常の大小,同値比較演算. 40> 1 == 2. false 41> 1 /= 2. true 42> 1 < 2. true 43> 1 > 2. false 44> 1 =< 2. true 45> 1 >= 2. false同値でないのは/=で表現し,less thanが異なる型を比較したときは型の大小を比較するらしい.以下のような型の順序が…

リスト内包表現

[ Expr || Qualifier1, ..., QualifierN]で表現する.QualifierIはtrueかfalseを返す条件やX よくある例としてquicksort -module(foo). -export([qsort/1]). qsort([]) -> []; qsort([Pivot|Rest]) -> qsort([X || X <- Rest, X =< Pivot]) ++ [Pivot] ++ qs…

関数定義

こんな感じ. -module(foo). -export([fac/1, fib/1]). fac(0) -> 1; fac(X) -> X * fac(X - 1). fib(1) -> 1; fib(2) -> 1; fib(X) -> fib(X-1) + fib(X-2). erlangもハイライトしてくれるんだなあ. -module(XXX). でモジュール名を宣言. -export([func/a…

erlang-mode

emacsのerlang用モード.ソースコードに含まれている.ソースからインストールすると /usr/local/lib/erlang/lib/tools-/emacs この辺にインストールされるみたい.使い方はここらへんにまとまってた.

コメント

コメントは%で始まる %% foo module -module(foo). -export([fac/1]). fac(0) -> 1; % case of 0 fac(X) -> X * fac(X - 1).

Erlangさわってみる

次に来るプログラミング言語はErlangらしい.この次に来るというのがどの程度のものなのかC++やJavaレベルなのかRubyレベルのことなのかHaskellぐらいのことなのかは良く知らないが…ちょっと面白そうなのでさわってみた.公式サイトはここらしい.とりあえず…

erl

erlangのshell.キーバインドはemacs-like(C-f, C-b, C-a, C-e, C-d)で,ヒストリ機能(C-p, C-n)などもある.行ごとを評価するのではなく,.(ピリオド)までを評価する. 1> 1 + 2 1> . 3 2> 1 + 2. 3 3>終了するときはC-cしてabortを選ぶかhalt().を実行. 3…