2014-04-29 6 views

답변

3

rationalize있다. 하지만 그것은 원하는 것을하지 않습니다. 분모가 1이면 여전히 길어집니다. 그러나 이것을 유형 테스트 용으로 사용하려는 경우 Clojure 함수 rational?은 long에 대해 true를 반환합니다.

Ratio 유형을 원한다면 소스 코드 rationalize이 기본 Java에 즉시 뛰어 들기 때문에 직접 작성해야한다고 생각합니다.

(clojure.lang.Ratio. 
    (. BigInteger (valueOf 3)) 
    (. BigInteger (valueOf 1))) 
; 3/1 

아마도 :

(defn myrationalize 
    [num] 
    (if (integer? num) 
     (clojure.lang.Ratio. 
     (. BigInteger (valueOf num)) 
     (. BigInteger (valueOf 1))) 
     (rationalize num))) 
+0

나는 그것이 적절한 해결책이라고 생각한다. –

5

당신은 명시 적으로이 합리적으로 긴 변환 필요하지 않습니다 작동하지 않습니다

.

Clojure의 변환합니다

  • 합리적인 긴 (java.lang.Long)에 (clojure.lang.Ratio) 때 : 분모가 또는 1로 만들 수 있습니다 때,
  • 일 때 합리적으로 longs 또는 기타 ints : 분모를 분모로 분해 할 수없는 경우 1.

따라서

(type (/ 4 2)) ; java.lang.Long

(type (/ 4 3)) ; clojure.lang.Ratio

+1

대답 주셔서 대단히 감사합니다. 나는 그것을 안다. 나는 그것을 필요로하지 않는다. 그러나 나는 그것을 원한다. 그리고 질문은 * 내가 원한다면 나는 그것을 할 수있다. –