Fórum: Programação Multiparadigma

Prática 1

 
Picture of Artur Miguel Dias
Re: Prática 1
by Artur Miguel Dias - quinta, 20 setembro 2012, 8:10
 
Professor não estou a conseguir a fazer o union, não me deixa fazer a comparação x > y e x < y. Porque razão? A lógica por mim parece a correcta, pode ajudar-me pf? Obrigado!  
 
def union[T](f:Set[T], s:Set[T]) : Set[T] =
    (f,s) match {
    case (Nil,_) => s
    case (_,Nil) => f
    case (x::xs, y::ys) => 
      if (x > y) y::union(x::xs, ys)
      else if (x < y) x::union(xs, y::ys)
      else x::union(xs, y::ys)
  }

Você está a assumir que está a trabalhar com listas ordenadas e que o tipo T tem disponível a operação "<". Para isso ser possível, seria necessário introduzir uma restrição sobre o tipo T.

Contudo o enunciado diz explicitamente que as listas não são ordenadas e alguns dos exemplos até apresentam listas não ordenadas. A solução pretendida é mais simples do que a sua (embora não tão eficiente).