Показва персонализиран клас комплексни данни

Тъкмо научавам за данните и се опитвам да дефинирам донякъде комплексни числа с тях.

До момента имам следното:

data Complex = Complex Int Int deriving(Eq)

instance Show Complex where
    show Complex a = a -- Not working

instance Num Complex where
    Complex a b + Complex c d = Complex (a+c) (b+d)
    -- etc.

Това, което се опитвам да направя, е да инстанцирам Show, за да накарам програмата да отпечата низ като комплексно число, като например: a + bi

Разбирам защо кодът, който написах, дава грешки, тъй като a е от тип Complex и програмата очаква низ, но не мога да си обясня как мога да разделя и двете числа и след това да добавя i към b, както и да поставя оператора между.

Някакви идеи?


person Sanzor    schedule 20.11.2020    source източник


Отговори (1)


Линията

show Complex a = a

дефинира функция show с два аргумента, като първият е Complex, а вторият е a. Това се справя със сигнатурата на show в клас Show, където намираме само един аргумент.

Тъй като този аргумент трябва да е Complex, вероятно искате нещо подобно

show (Complex a b) = show a ++ " + " ++ show b ++ "i"

Обърнете внимание как използваме show на a и b от тип Int, за да ги преобразуваме в низове и след това свързваме куп низове, използвайки ++.

Също така имайте предвид, че когато b е отрицателно, резултатът от горното е неоптимален. Може да искате да промените функцията съответно.

person chi    schedule 20.11.2020