[トップ][ノート][編集履歴][一覧][最近の更新][->English]

Erlang/2005/09/13/string

Category of Erlang

Erlang/2005/09/05/こんなLLはXXだにて文字列型がないと書いたが、 どういうことかというと、あれだ。 Cといっしょ。 Erlangにおける文字列は要するにリスト。Cだとポインタだから正確には違うか。

> string:equal("hello", [104,101,108,108,111]).
true

Cと違った明白な利点はやはり、car, cdrがそのまま引っぱってこれることでしょう。

例えば、公式配布のドキュメントに付いてくるサンプルとして、 下のような順列のリストを作る関数permsを例にとってみる。

The following example generates all permutations of the elements in a list:

perms([]) -> [[]];
perms(L)  -> [[H|T] || H <- L, T <- perms(L--[H])].

We take take H from L in all possible ways. The result is the set of all lists [H|T], where T is the set of all possible permutations of L with H removed.

> perms([b,u,g]).
[[b,u,g],[b,g,u],[u,b,g],[u,g,b],[g,b,u],[g,u,b]]

リストの内包表記の例なんだけど、この話は置いておいて、 これがそのまま文字列にも適用できる。

> lists:foreach(fun (X) -> io:fwrite("~s ", [X]) end, perms:perms("anagram")).

おお、アナグラム生成プログラムが3行で書けた。

でもまあ文字列型がないと、他のLL言語のように正規表現でウヴォアー、 ってができないのでちと痛い。

blog comments powered by Disqus