Harvestは小説の題名。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語2016-07-02身近な存在としての量子力学(12):ブラをHaskellで記述する量子力学とHaskell10.ブラをHaskellで記述するそれでは、ブラをHaskellで実現することを考える。ブラをデータ型で定義するケットと同じように、ブラも代数型データで表すことにしよう。ケットは7章で次のように定義した。aすなわち、真空状態をKetZeroで表した。現在の状態で表現した。ブラもこれと同じように表すことにしよう。真空の状態をBraZeroで表すこととする。iで表すことにしよう。ケットの時は増加の意味を持たせて+を用いたが、ブラの場合には反対に減少と考え-を用いる。7章では、状態を表していないケットが生じたときは、例外が発生するようにした。nothing(0)を出力した。このように定義すると、内積の計算をする時に不備をきたす。そこで、状態を表していないときは、Zero'で表すこととし、これも、ブラのデータ型に含めるようにした。ブラのデータ型は従って次のように定義した(これに伴って、ケットの方も修正し、Zeroを定義する。これは後すぐ述べる)。aなお、リストを作るための:-:は左の方に結合されていくので、infixlとした。ケットの方も、状態を表していないときはZeroで表すこととし、次のように変更した。a次に、ブラの型に、等しいかどうかを判定するための関数Eqと、表示するための関数Showを、インスタンスとして実現する必要がある。関数Eqの方は、現在の状態とその後に続く演算子の並びが等しいかどうかで判定する。従って、演算子の並び方は異なるが、現在の状態にこれらの演算子を施した結果得られる新たな状態で比較していない。そのため、新たな状態が等しい場合でも、現在の状態と演算子の並びが作るリストが異なっている場合には等しくないと判定される。プログラムは次のようになる。表示の方はケットの場合に少し変更を及ぼし、演算子の間にカンマ(,)が入るようにした。dFalseケットの方もこれに合わせて変更した。プルグラムを見てみよう。bブラが表す状態をきれいに印字したい。ケットの方が出来上がっているので、これを利用することにする。次のようにすればよい。与えられたブラの状態に対して、その共役となるケットの状態を作成し、状態の中身をそのままにして、ケットの記号をブラのそれに代えればよいので、次のようになる。