ここから本文です

回答受付終了まであと6日 回答を投稿すると知恵コイン15枚が追加されます

学校のhaskelの授業の課題なのですが本当によくわかりません。なので回答をお願い...

fumufumu3999さん

2017/8/109:59:35

学校のhaskelの授業の課題なのですが本当によくわかりません。なので回答をお願いしたいです。



(1) 四元数とは複素数を拡張したもので 3 つの虚数単位 i,j, k を用いて a +
bi + cj + dk(a, b, c, d は実数)の形に表

せる数である。通常の実数の四則演算に加え
て i
2 = j
2 = k
2 = −1 と ij = k,jk = i, ki = j,ji = −k, kj = −i, ik = −j という規則と
1
分配法則結合法則などによって計算され,積の交換法則を必ずしも満たさないとい
う特徴がある。
四元数 a + bi + cj + dk を (Quat a b c d) の形に表す新しいデータ型
data Quaternion = Quat Float Float Float Float
を定義して,その加減乗除を行う関数 addQ,subQ,mulQ,divQ を定義せよ。
(2) リスト内の全要素を 2 分探索木 (pp.139–142) にいったん登録し,その中
のデータを左から順に取り出して並べていくことでソートができる。この方針でリス
トのソートを行う関数 treeSort を定義せよ(リスト内に同じデータが複数ある場合,
ソートした結果,それらは 1 つにまとめてもよいし,そのまま複数個残ってもいい)。

(3) 3 次元実ベクトルを 3 つの浮動小数点数を用いて (Vec3D x y z) の形に表
す新しいデータ型
Vec3D = Vec3D Float Float Float
を定義して,その和,スカラー倍,内積を計算する関数
add3D :: Vec3D -> Vec3D -> Vec3D
scalarProduct :: Float -> Vec3D -> Vec3D
innerProduct :: Vec3D -> Vec3D -> Float
を定義せよ。また 2 つの 3 次元実ベクトル a, b を受け取り最初のベクトル a に対し
て,第 2 のベクトル b を a に平行な成分 b0 と垂直な成分 b1 に分解する(すなわち
b = b0 + b1,b0 ∥ a,b1⊥a となる)関数
decompose :: Vec3D -> Vec3D -> (Vec3D, Vec3D)
を作れ。



(4) ペアノ算術を一部 Haskell で実現してみよう。型 Peano を
data Peano = Zero | Suc Peano deriving (Show, Read, Eq, Ord)
で定義する。非負整数 n を Suc(· · ·(Suc
| {z }
n
Zero)· · ·) で(ペアノの数と呼ぶ)表現しよ
うという意図である。ペアノの数を通常の非負整数に変換する関数とその逆変換を行
う関数
peano2int :: Peano -> Integer
int2peano :: Integer -> Peano
を定義せよ。 また(ほかの型に変換することなくそのままで)ペアノの数同士の足
し算を行う関数とペアノ数を 3 で割った余りを返す関数
addPeano :: Peano -> Peano -> Peano
mod3Peano :: Peano -> Peano
を定義せよ。たとえば
addPeano (Suc (Suc Zero)) (Suc Zero) =⇒ Suc (Suc (Suc Zero))
mod3Peano (addPeano (Suc (Suc Zero)) (int2peano 5)) =⇒ Suc Zero
となればよい。

補足1問だけでもお願いします!

閲覧数:
31
回答数:
0

違反報告

回答投稿

全角1文字以上で回答を入力してください。

※質問が「投票受付中」「解決済み」になると、回答を取り消すことはできません。
※一度に投稿できるURLは3つ以内です。(プレミアム会員・知恵袋アプリは除く)

エラーが発生しました。お手数ですが、時間をおいて再度お試しください。

あと全角4000文字

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。