이 질문은 Isabelle/HOL 정리 정리기를 사용한 코드 생성을 참조합니다.목록에 '고유'를위한 더 빠른 코드
나는 목록
export_code distinct in Scala file -
나는 다음과 같은 코드
def member[A : HOL.equal](x0: List[A], y: A): Boolean = (x0, y) match {
case (Nil, y) => false
case (x :: xs, y) => HOL.eq[A](x, y) || member[A](xs, y)
}
def distinct[A : HOL.equal](x0: List[A]): Boolean = x0 match {
case Nil => true
case x :: xs => ! (member[A](xs, x)) && distinct[A](xs)
}
이 코드는 차 런타임이에게 얻을
에distinct
기능에 대한 코드를 내보낼 때. 더 빠른 버전이 있습니까? 내 이론의 시작 부분에 문자열에 대해
"~~/src/HOL/Library/Code_Char"
을 가져 오는 것과 같은 것을 생각하고 효율적인 코드 생성을 설정합니다.
distinct
의 더 나은 구현은 O (n log n)에서 목록을 정렬하고 목록을 한 번 반복하는 것입니다. 그러나 나는 더 잘할 수 있다고 생각 하나?
어쨌든 distinct
의 구현이 더 빠르며 Main
의 다른 기능을 사용할 수 있습니까?
[이 메일 링리스트 게시물] (https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2011-March/msg00012.html)은 isabelle에게' string'은'linorder'입니다. 이제는 별개의 [ '' ',' '' ']'는 잘 작동합니다. – corny
[Efficient_Distinct]의 전체 덤프 (http : // pastebin.com/1PvBgVeE) 파일과 이에 상응하는 [Scala code] (:47:12) – corny
'string'을'linorder' 인스턴스로 만들려면 HOL/Library에서 List_lexord와 Char_ord를 가져 오면됩니다. Char_ord는'nibble'과'char'에 대한 선형 순서를 제공합니다. –