[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
460(1): 2020/08/31(月)18:28 ID:mkAi3PX1(3/3) AAS
import Data.Ratio
import Data.Complex
data ComplexRational = CR (Complex Rational) deriving (Show,Eq)
instance Num (ComplexRational) where
(CR (x:+y)) + (CR (x':+y')) = CR $ (x+x') :+ (y+y')
(CR (x:+y)) * (CR (x':+y'))
= CR $ (x*x'-y*y') :+ (x*y'+y*x')
negate (CR (x:+y)) = CR $ negate x :+ negate y
abs = undefined
signum = undefined
fromInteger n = CR $ fromInteger n :+ 0
instance Fractional (ComplexRational) where
recip (CR (x:+y))= CR $ (x/(x^2+y^2)):+(-y/(x^2+y^2))
toComplex (CR x) = x
i = CR $ 0:+1
onCircle a b c d = (==0) $ imagPart $ toComplex $ ((a-c)/(b-c))/((a-d)/(b-d))
a=0
b=3
c=4*i
d=7/2+7/2*i
main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d
-----
CR (618 % 841 :+ 108 % 841)
True
466: 2020/09/05(土)02:01 ID:hzZ7uEzq(1/3) AAS
>>458
です
自己レスです
色々調べて一応Complex RationalにNumのinstance入れる方法見つけました
しかしかなり裏技というか、あまり関心しない方法かもしれません
やはり正攻法は>>460のようにカプセル化する方だと思いますけど、せっかく見つけたのでうpします
>>460と同じく0,3,4i,7/2+7/2iが同一円周上にあるか確認するプログラムです
ついでにabsも使えるようにしてあります
absがいらないならsqrt=の部分がなくても動作します
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.058s