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のドキュメンテーショ
関数を繰り返し適用した式を返す (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) を計算する