2016-12-18 3 views
-1

케이스 클래스가 : case class Item(id: Long, rank: Int)이고 Item 개체의 힙을 만들고 싶습니다. 나는 Heap[Item]의 인스턴스를 만들려고하지만 난 배 함수를 재정의해야하지만 난 어떻게 정확히 모르는 때문에 나는이 시점에서 막혔어요 내가이 일을하기 위해 어떻게해야합니까 무엇힙을 사용하려는 scalaz, 접기 기능을 재정의하는 방법

val heap = new Heap[Item] { 
     override def fold[B](empty: => B, nonempty: (Int, (Item, Item) => Boolean, Tree[Ranked[Item]]) => B): B = { 

     } 
    } 

그래서 나는 힙 컬렉션을 사용할 수 있습니다; 감사합니다. .

+0

당신은 그것을 무시 TO_ _have하지만 당신이 뭘 원하는지 모르는 ??? – Dima

+0

폴드가 무엇인지 모르겠다. 처음으로 스칼라즈를 사용할 때도 예제 코드를 찾을 수 없었다. – user3224454

+0

그런 다음 스카치를 사용하지 마십시오. 너는 필요 없어. 기능이 무엇인지 모르는 경우 함수를 재정의하지 마십시오. – Dima

답변

3

처음에는 new Heap으로 직접 전화하지 마십시오.

먼저 Item에 대해 암시적인 Order을 정의하십시오.

import scalaz._, Scalaz._ 

case class Item(id: Long, rank: Int) 
object Item { 
    implicit val order: Order[Item] = Order.orderBy(_.rank) 
} 

을 그리고 다음 Heap 동반자 개체에서 헬퍼 방법을 사용하여 Heap의를 만들 : 예를 들어 순위에 의해 주문하는

Heap.Empty[Item] 
Heap.singleton(Item(1L, 1)) 
Heap.fromData(List(Item(10L, 3), Item(20L, 2), Item(30L, 1)))