マガジンのカバー画像

長めの文章

30
運営しているクリエイター

2015年10月の記事一覧

[Mathematica] 順列(nPr)と組み合わせ(nCr)

まずは5要素のリストを定義する。
In[1]:= list = {a, b, c, d, e};

5個から3個取って順番に並べる順列を列挙する。
In[2]:= Permutations[list, {3}]

Out[2]= {{a, b, c}, {a, b, d}, {a, b, e}, {a, c, b}, {a, c, d}, {a, c,
e}, {a, d, b}, {a,

もっとみる

Javaのintとbooleanのボックス化

Javaにおけるプリミティブ型のintとbooleanのボックス化メソッドについて少し調べてみた。

intのボックス化クラスとしてはInteger, booleanにはBooleanがjava.lang内に定義されている。

いずれにしても、明示的なボックス化の方法にはそれぞれのクラスのコンストラクタを呼ぶか、スタティックメソッドのvalueOfを呼ぶかの2つがある。Javaのドキュメンテーショ

もっとみる

boolean問題

いくつかの言語でプログラムを書いていると、注意しなければならないことがある。そのうちの1つがboolean問題だろう。

boolean問題というのは、データ型の値のうち何が真で何が偽かが言語によって異なるという問題である。

具体的に言えば、整数型の0、文字列型の空文字列""、ヌル(null, nil)が真であるか偽であるかが言語によって異なるということである。また、データ型としてのboolea

もっとみる

文字コード問題

文字列とかテキストファイル関連ライブラリを特定の文字コードを仮定して実装すると、意図しない文字コードの入力があったときに困るかもしれない。例えばUnicodeのテキストファイルを読み込むつもりでいたのにEUCのファイルを食わせるとバグの原因になりうる。

あるいは、言語側にとっては特定の文字コードでデータが入っているメモリ領域は文字列に見えるが、そうでなければただのメモリマップにしか見えない。

もっとみる

関数を繰り返し適用した式を返す (Haskell)

これもまた Haskell ネタであるが、

Mathematica には、式 x に関数 f を n 回適用した結果を返す Nest[f, x, n] という関数が定義されている。これと同様なものが Haskell には無いのかなと思っていて、見当たらないので再帰で自作していた。
ところが最近 iterate という関数を見つけた。これを利用すれば nest が簡単に定義できる。
まず、iter

もっとみる

HaskellとMathematicaの畳み込み関数

Haskellには、左結合の畳み込み関数 foldl, foldl1 と右結合の畳み込み関数 foldr, foldr1 が定義されている。

foldl は引数に2変数関数、初期値、リストを順に取り、リストを頭から順に続けて演算した最終的な結果を返す。たとえば、この場合
 foldl (+) 0 [1,2,3,4,5]  -- = 15
は、(((((0+1)+2)+3)+4)+5) を計算する

もっとみる