import Data.List.Split
import Data.List(nub, groupBy)
z = splitOn "+" "x^2+2*x^3+x^2"
y = map (splitOn "*") z
x = map head y
toInt :: [String] -> [Int]
toInt = map read
u1 = filter ((< 2) . length) y
u2 = filter ((> 1) . length) y
v = map ("1" :) u1
q = u2 ++ v
q2 = zip toInt(map head q) (map last q)
q6 = groupBy nub(map tail q) q
q3 = map tail q
q5 = nub(q3)
q1 = map head q
1. Для
zip toInt(map head q) (map last q)
Я бы хотел добавить голову обратно в хвост после преобразования головы в целое число.
результат должен быть [[1,"x^3"],[2,"x^2"],[1,"x^2"]]
я могу сделать
*Main Data.List> zip [2,1,1] ["x^3","x^2","x^2"]
[(2,"x^3"),(1,"x^2"),(1,"x^2")]
но выше нельзя, и есть разница, которую я заметил, это ()
, а не []
2. Как написать groupBy
в списке, я передал различные элементы для groupBy
После группировки это для добавления их головы
groupBy (nub(map tail q)) q
: 1: 10:
Не удалось найти ожидаемый тип a0 -> a0 -> Bool'
with actual type
[a1] '
В возвращаемом типе вызова nub'
In the first argument of
groupBy ', а именно `(nub (map tail q))'
В выражении: groupBy (nub (хвост карты)) q
q похоже на хеш-таблицу, похоже, что она не может группироваться по второму элементу