Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
re sp on dPa li nd rom es =
u n l i n e s . map (\ xs > i f i s P a l i n d r o m e xs
then palindrome
e l s e nao palindrome ) . l i n e s
o Funcional
Programaca
Lista de Exerccios 04
Entrada:
4
1
2
3
4
Sada:
[ 1 , 2 , 3 , 4 ]
Modifique o programa para imprimir o somat
orio dos valores digitados.
Tautologia
import Data . L i s t
5
C = (F 32)
9
(1)
data Prop =
Const Bool
| Var Char
| Neg Prop
| Conj Prop Prop
| D i s j Prop Prop
| Impl Prop Prop
> Bool
p)
&& v a l o r i q
| | valor i q
<= v a l o r i q
primeiro (a , b) = a
segundo ( a , b ) = b
: : I n t e r p r e t a c a o > Prop
( Const b ) = b
i ( Var x ) = busca x i
i ( Neg p ) = not ( v a l o r i
i ( Conj p q ) = v a l o r i p
i ( Disj p q) = valor i p
i ( Impl p q ) = v a l o r i p
c o n t e n t s < getContents ;
o lines, words:
Use a funca
lines quebra uma string em uma lista de strings usando o caractere new line
como separador.
b i t s : : I n t > [ [ Bool ] ]
b i t s 0 = [ [] ]
b i t s n = [ x : xs | x < [ True , F a l s e ] , xs < b i t s ( n1)]
words quebra uma string em uma lista de palavras usando o caractere espaco
como separador
Exemplo:
i n t e r p r e t a c o e s : : Prop > [ I n t e r p r e t a c a o ]
i n t e r p r e t a c o e s p = [ z i p v a r b | b < b i t s ( length v a r ) ]
where v a r = ( v a r i a v e i s p )
aslfjasfl
salfsa
asflsafsa aslfsaf
alsfhsa aslfjas a s l f j a f l k
Sada:
o recursiva da funca
o dual :: Prop -> Prop que obtem
12. Escreva uma definica
o, i.e. a proposica
o que resulta de substituir todas as
o dual duma proposica
es por disjunco
es (e vice-versa) e as constantes True por False (e viceversa);
conjunco
es s
as vari
aveis e negaco
ao inalteradas. Exemplos:
linhas : 4
palavras : 7
o interact :: (String -> String) -> IO () e muito utilizada para
9. A funca
construir programas com entrada e sada simples. Considere o seguinte programa:
o
Dica: Use a seguinte funca
o duma funca
o showProp ::
14. Escreva uma definica
o em texto;
converter uma proposica
Alguns exemplos:
> showProp ( Neg ( Var a ) )
( a )
> showProp ( D i s j ( Var a ) ( Conj ( Var a ) ( Var b ) ) )
( a | | ( a && b ) )
> showProp ( Impl ( Var a ) ( Impl ( Neg ( Var a ) ) ( Const F a l s e ) )
( a > ( ( a ) > F ) )
o da funca
o satisfaz :: Prop -> Bool que verifica se uma
15. Escreva uma definica
o e satisfazvel, isto e, se existe uma atribuica
o de valores a
`s vari
proposica
aveis que
a torna verdadeira.
o da funca
o equiv :: Prop -> Prop -> Bool que verifica
16. Escreva uma definica
es s
se duas proposico
ao equivalentes, isto e, tomam o mesmo valor de verdade para
es de vari
todas as atribuico
aveis.
Sugest
ao: p e q s
ao equivalentes se e s
o se Conj (Impl p q) (Impl q p) for uma
tautologia.
rvore de Pesquisa
A
es recursivas para uma a
rvore bin
17. Complete as seguintes definico
aria:
Por exemplo:
o recursiva para calcular o n
rvore.
(a) Escreva uma funca
umero de n
os de uma a
o recursiva da funca
o ocorre :: Ord a => a ->
(a) Escreva uma definica
MConj a -> Int que procura o n
umero de ocorrencias de um valor num
multi-conjunto; o resultado deve ser 0 se o valor n
ao pertencer ao multiconjunto.
o recursiva da funca
o inserir :: Ord a => a ->
(b) Escreva uma definica
MConj a -> MConj a que insere um valor num multi-conjunto mantendo a
rvore de pesquisa ordenada.
a
o recursiva da funca
o listar ::
(c) Escreva uma definica
para listar os elementos de um multi-conjunto.
o recursiva da funca
o tamanho :: MConj a -> Int
(d) Escreva uma definica
para calcular o n
umero de elementos de um multiconjunto.
o recursiva da funca
o sumMConj :: MConj a ->
(e) Escreva uma definica
Int para calcular o somat
orio de todos os elementos de um multiconjunto.
es
Relaco
o de uma relaca
o bin
19. Considere a representaca
aria nos inteiros como uma lista de
pares.
o da funca
o de ordem superior mapArv :: (a -> b)
(e) Escreva uma definica
o f a cada valor
-> Arv a -> Arv b tal que mapArv f t aplica uma funca
rvore t. a
rvore t.
duma a
r e f l e x i v a [ 1 , 2 , 3 ] [ ( 1 , 1 ) , ( 2 , 2 ) , ( 1 , 2 ) , ( 3 , 3 ) ] = True
r e f l e x i v a [1 ,2 ,3] [(1 , 2) , (2 , 3)] = False
o da funca
o reflect :: Arv a -> Arv a que
(f) Escreva uma definica
rvore. Exemplo:
recursivamente troca os lados esquerdos e direitos de uma a
s i m e t r i c a [ ( 1 , 3 ) , ( 3 , 1 ) , ( 2 , 2 ) ] = True
s i m e t r i c a [(1 , 2) , (2 , 3)] = False
o transitiva :: Rel -> Bool que verifique se uma
(c) Escreva uma funca
o e transitiva (R e transitiva se e s
relaca
o se (x, y) R (y, z) R
(x, z) R para todos x, y, z).
Exemplos:
t r a n s i t i v a [ ( 1 , 3 ) , ( 1 , 2 ) , ( 2 , 3 ) ] = True
t r a n s i t i v a [(1 , 2) , (2 , 3)] = False
o da funca
o que insere um valor numa a
rvore de
(g) Escreva uma definica
o da
pesquisa ordenada. Deve manter invariante a propriedade ordenaca
rvore e n
rvore.
a
ao inserir outra c
opia do valor se este j
a ocorrer na a
Grafos
o de um grafo dirigido de vertices inteiros como um par
20. Considere a representaca
ordenado uma lista de vertices e uma lista de arestas (isto e, pares ordenados de
vertices).
type V e r t = I n t
type Grafo = ( [ V e r t ] , [ ( V e r t , V e r t ) ] )
o caminho :: Grafo -> [Vert] -> Bool tal que caminho g xs e
Escreva uma funca
True se xs e uma lista de vertices que representa um caminho no grafo (isto e, se
cada dois vertices consecutivos correspondem a uma aresta) e False, caso contr
ario.
o da funca
o que remove um valor numa a
rvore de
(h) Escreva uma definica
o da
pesquisa ordenada. Deve manter invariante a propriedade ordenaca
rvore.
a
Exemplos:
m a i s e s q : : Arv a > a
m a i s e s q (No x V a z i a ) = x
m a i s e s q (No
esq ) = m a i s e s q esq