2014-02-07 8 views
1

SML에서 패턴 일치를 학습 중이므로!/b!를 계산하려면 fact_till (a,b) 함수를 작성하고 싶습니다. 예를 들어, fact_till (5,3)은 5 * 4 = 20을 리턴해야합니다.튜플의 패턴에 중복 변수가 있습니다.

fun fact_till t = case t of 
        (a,a) => 1 
       | (a,b) => a * fact_till(a-1,b) 

을하지만 Error: duplicate variable in pattern(s): a을 가지고 :

내 코드는 다음과 같습니다. 나는 SML이 (a,a) 패턴을 인식하지 못한다고 추정한다. 그렇다면이 패턴을 표현하는 올바른 방법은 무엇입니까?

답변

2

이 작업을 수행하는 올바른 방법은 다음과 같습니다 원하는 경우

fun fact_till (a,b) = if a = b 
         then 1 
         else a * fact_till(a - 1, b) 

이 또한, 경우 문을 수행 할 수 있습니다

fun fact_till (a,b) = case a = b of 
         true => 1 
        | false => a * fact_till(a - 1, b) 
관련 문제