2013-03-09 5 views
1

튜플을 인수로 갖는 정의를 만들고 싶습니다.정의에서 튜플 사용

definition my_def :: "('a × 'a) ⇒ bool" where 
    "my_def (a, b) ⟷ a = b" 

그러나 이것은 허용되지 않습니다. 오류 메시지가 fun 대신 definition의 작품을 사용

Bad arguments on lhs: "(a, b)" 
The error(s) above occurred in definition: 
"my_def (a, b) ≡ a = b" 

그러나 이것은 내가 원하는 것이 아니다. 다음 표기는 작동하지만 다소 못생긴 :

definition my_def :: "('a × 'a) ⇒ bool" where 
    "my_def t ⟷ fst t = snd t" 

definition에 인수로 튜플을 사용하는 가장 좋은 방법은 무엇입니까?

+0

그래서 여기 fun''에 어떤 문제가 있는지? '재미 '와'정의'는 * 파생 된 * 정의 메커니즘에서 동등한 반면,'정의'는 좀 더 미니멀리즘을 가지며 (인수없이 정의 할 수 있습니다). – Makarius

+0

'fun'는 자동으로 그 정의로 확장됩니다. – corny

+4

그래, 그게 기본값의 특정 차이입니다. 'fun' 다음에'my_def.simps [simp del]'을 선언하거나 lsf37에서 제안한 튜플 추상화를 사용하여'definition'을 사용할 수 있습니다. – Makarius

답변

2

아마도 fun을 사용하는 것이 가장 쉬운 방법 일 수 있습니다. 정의 패키지는 왼쪽의 패턴을 인식하지 못합니다.

또 다른 옵션은 람다 표현식 튜플 패턴을 사용하는 것입니다 my_def ≡ %(a,b). a = b

+1

'my_def (a, b) = ...'와'my_def tup = % (a, b)에주의하십시오. ... '는 단순화 자와 함께 사용될 때 다릅니다. 첫 번째 정의는 인수가 이미 분할 된 경우에만 확장됩니다. 이것은 때로는 유용하고 때로는 그렇지 않다;) –

+0

위의 주석에서 아마도 혼란스런 오타를 지적하자면 : my_def tup = % (a, b). ... '는'my_def = % (a, b)'로 대체되어야합니다. ... '. –