[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
458
(1): 2020/08/31(月)18:26 ID:mkAi3PX1(1/3) AAS
皆さんご助言ありがとうございます
実は家のパソコン壊れててHaskellはオンラインHaskellコンパイラというので当座を凌いでるんですがコレコンパイラオプションもインラインプラグマ?とかいうのも使えないっぽくてFlexible Instanceとか使いたくても使えないんです
Num Rationalは標準で入ってます
入れられなくて困ってるのはNum (Complex Rational)なんです
Num a=>Num (Complex a)
は二重定義でダメだと怒られます

prog.hs:55:12: error:
Duplicate instance declarations:
instance Num a => Num (Complex a) -- Defined at prog.hs:55:12
instance RealFloat a => Num (Complex a)
-- Defined in ‘Data.Complex’
|
55 | instance Num a => Num (Complex a) where
| ^^^^^^^^^^^^^^^^^^^^^^^^
459: 2020/08/31(月)18:28 ID:mkAi3PX1(2/3) AAS
しょうがないのでとりあえずComplex Rationalを“カプセル化”してみました
複素座標0,3,4i,7/2+7/2iである4点が同一円周上にあるか確認するプログラムです
同じ事をComplex Floatとかでやると丸め誤差で誤判定してくれます
できるんですがちょっと不愉快ですね
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
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.032s