アットウィキロゴ
大久保弘崇
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

大久保弘崇

ex4.1

最終更新:

hirotakaohkubo

- view
管理者のみ編集可

4.1

前半
absPitch . pitch
= λap → (absPitch . pitch) ap
= λap → 12 ∗ div ap 12 + pcToInt ([C,Cs,···,As,B] !! mod ap 12)
= λap → 12 ∗ div ap 12 + [0..11] !! mod ap 12  --(1)
= λap → 12 ∗ div ap 12 + mod ap 12  --(2)
= λap → ap  --(3)
= id
1は f (xs !! k) = (map f xs) !! k より。
2は x ≤ k ならば [0..k] !! x = x より。
3は除算演算子の定義の x = y ∗ q + r の形になっているところから。

後半
まず「異名同音を考慮して音が等しい」とは、絶対音階に変換して等しいことと定義する。
すなわち、pitch.absPitch と id が異名同音を考慮して音が等しいとは、
任意の音 p に対して、pitch (absPitch p) と id p に absPitch を施した結果が等しいということである。
式で書くと
∀p . absPitch (pitch (absPitch p)) == absPitch (id p)
左辺は前半より absPitch p と等しいので、題意は満たされた。

4.2

trans i (trans j p)
= pitch (absPitch (pitch (absPitch p + j)) + i)
= pitch ((absPitch p + j) + i)
= pitch (absPitch p + (i + j))
= trans (i + j) p

4.3

trilln i k n@(Prim (Note p nd)) = trill i (nd / k) n
trilln' i k n@(Prim (Note p nd)) = trill' i (nd / k) n

4.4

証明するべき式を正しく書く。
∀n = Prim (Note p nd) . durM (trill i d n) = durM n
右辺はndである。
左辺の値がこれに等しいことを、区間で分ける帰納法で証明する。
■基底 0 ≤ nd ≤ d の場合
durM (trill i d n)
= durM (trill i d (Prim (Note p nd)))
= durM (Prim (Note p nd))
= nd
■帰納 ある 0 ≤ nd0について題意が満たされていると仮定する。このとき、nd = nd0 + d を考える。
durM (trill i d n)
= durM (trill i d (Prim (Note p nd)))
= durM (Prim (Note p d) :+: trill (…) d (Prim (Note (…) (nd − d))))
= durM (Prim (Note p d) + durM (trill (…) d (Prim (Note (…) nd0))))
= d + nd0
= nd

4.6

data Mode = Ionian | Dorian | Phrygian | Lydian | Mixolydian | Aeolian | Locrian
scale :: Mode -> Note -> [Music]
scale mode n = m :+: applyM m (mode2scale mode) where
  m = Prim n
  mode2scale Ionian     = ionian
  mode2scale Dorian     = dorian
  mode2scale Phrygian   = phrygian
  mode2scale Lydian     = lydian
  mode2scale Mixolydian = mixolydian
  mode2scale Aeolian    = aeolian
  mode2scale Locrian    = locrian
  major = Trans 2
  minor = Trans 1
  rotate (x:xs) = xs ++ [x]
  applyM m [] = []
  applyM m (trans:ts) = trans m : applyM (trans m) ts
  ionian     = [major, major, minor, major, major, major, minor]
  dorian     = rotate ionian
  phrygian   = rotate dorian
  lydian     = rotate phrygian
  mixolydian = rotate lydian
  aeolian    = rotate mixolydian
  locrian    = rotate aeolian
 

コメント

名前:
コメント:
記事メニュー
最近更新されたスレッド
人気記事ランキング
ウィキ募集バナー