LINUX.ORG.RU

Haskell Из одного списка создать два

 


0

2

Есть список с комплексными числами и из этого списка нужно создать два списка.

Примерно есть список List = [ [ [a0 :+ b0],[d0 :+ k0] ], [ [a1 :+ b1],[d1 :+ k1] ], ..]

Сначала элементы a0, a1, a2 взять модуль и возвести в квадрат и создать список

List1 = [ (|a0|)^2, (|a1|)^2, (|a2|)^2…]

И над элементами b сделать тоже самое, но создать другой список List2.

List2 = [ (|b0|)^2, (|b1|)^2, (|b2|)^2…]

я понимаю что модуль для комплексных чисел это magnitude, map функции которая применяется к каждому элементу списка ну и квадрат понятно ^2

А вот как это все собрать, не понимаю.



Последнее исправление: simona (всего исправлений: 3)
Prelude> let xs = [(1,1), (2,2), (3,3)]
Prelude> unzip [ (x^2, y^2) | (x,y) <- xs ]
([1,4,9],[1,4,9])

Я понимаю, что с хацкеллом у тебя туго, но объясни вот что: зачем тебе модуль, если ты число в квадрат возводишь?

На будущее: используй Hoogle. Для сигнатуры [(a,b)] -> ([a], [b]) выдаётся ровно то что тебе нужно.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

доставлю: Комплексное число — это выражение вида a + bi, где a, b — действительные числа, а i — так называемая мнимая единица, символ, квадрат которого равен –1.

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

Да, я в курсе. Но код у ТС совсем о другом. Я бы вместо списка списков (или туплов) взял реализацию из Data.Complex и не парился. Там даже Num есть.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Возможно я изначально не верно задала вопрос.Отредактировала его.

simona
() автор топика

Не очень понял, в чем проблема. Если тебе прям так, как у тебя написано, то

import Data.Complex
import Control.Exception (assert)

list0 = [ [ [2 :+ 3], [4 :+ 5] ], [ [(-1) :+ 3], [(-2) :+ (-1)] ] ]

mapPart f = map ((^2) . f . head . head) list0

list1 = mapPart realPart

list2 = mapPart imagPart

main :: IO ()
main = print list1 >> print list2

Но, судя по всему, просто вопрос неправильно задан.

balsoft ★★
()
Ответ на: комментарий от balsoft

Спасибо большое, это именно то, что нужно было.

simona
() автор топика

Делать домашки с помощью лора? Причём это ведь тупо упражнение, тут думать не нужно, всё шаблонно.

Люди совсем офигели.

anonymous
()
Ответ на: комментарий от anonymous

Скажи спасибо, что она на легком хачкеле домашку делает, а не на расте каком.

Virtuos86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.