-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlistInHaskell.hs
More file actions
78 lines (62 loc) · 2.1 KB
/
Copy pathlistInHaskell.hs
File metadata and controls
78 lines (62 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
somaLista :: [Int] -> Int
somaLista [] = 0
somaLista (x:xs) = x + somaLista xs
multDois:: [Int] -> [Int]
multDois [] = []
multDois (x:xs) = 2*x : multDois xs
-- Exercícios de Lista 1
--(1)
multLista :: Int -> [Int] -> [Int]
multLista a [] = []
multLista a (x:xs) = a*x: multLista a xs
-- (2)
--elemento :: Int -> [Int] -> Bool
elemento :: Int -> [Int] -> Bool
elemento _ [] = False
elemento a (x:xs)
| a == x = True
| otherwise = elemento a xs
-- (3)
conta :: Int -> [Int] -> Int
conta _ [] = 0
conta a (x:xs)
| a == x = 1 + conta a xs
| otherwise = conta a xs
-- (4)
contaMaiores :: Int -> [Int]-> Int
contaMaiores _ [] = 0
contaMaiores a (x:xs)
| a < x = 1 +contaMaiores a xs
| otherwise = contaMaiores a xs
-- (5)
maiores :: Int -> [Int] -> [Int]
maiores _ [] = []
maiores a (x:xs)
| a < x = x : maiores a xs
| otherwise = maiores a xs
-- (6)
geraLista :: Int -> Int -> [Int]
geraLista 0 _ = []
geraLista m n = n :geraLista (m-1) n
-- (7)
addFim :: Int -> [Int] -> [Int]
addFim a [] = [a]
addFim a (x:xs) = x : addFim a xs
-- (8)
-- Função para concatenar duas listas
join :: [Int] -> [Int] -> [Int]
join [] ys = ys -- Se a primeira lista estiver vazia, retorna a segunda lista
join (x:xs) ys = x : join xs ys -- Adiciona o primeiro elemento da primeira lista ao resultado da concatenação do restante da primeira lista com a segunda lista
-- (9)
-- Função para inverter uma lista
inverte :: [Int] -> [Int]
inverte [] = [] -- Caso base: lista vazia
inverte (x:xs) = inverte xs ++ [x] -- Caso geral: inverte o restante da lista e adiciona o elemento atual no final
-- (9-b)
-- Função auxiliar para acumular elementos na ordem invertida
inverteAux :: [Int] -> [Int] -> [Int]
inverteAux [] acc = acc -- Caso base: lista vazia, retorna o acumulador
inverteAux (x:xs) acc = inverteAux xs (x:acc) -- Adiciona o elemento atual no início do acumulador
-- Função principal para inverter uma lista
inverteB :: [Int] -> [Int]
inverteB lista = inverteAux lista [] -- Chama a função auxiliar com a lista original e um acumulador vazio