Haskell : "문자 그대로 '0.0'에서 발생하는 (Fractional (아마 Float)) 인스턴스가 없습니다."

Tahuru

특정 조건이 주어진 경우 목록 끝에 0.0 또는 Nothing을 추가하는 함수를 만들려고했지만 컴파일러는 단순히 리터럴 번호를 목록에 추가하고 제목에 인용 된 오류를 반환합니다.

다음은 오류를 반환하는 코드입니다.

createDistList :: WAdjList -> Int -> Int -> [Maybe Float] -> [Maybe Float]
createDistList [] i j ys = if i == j then ys ++ [0.0] else ys ++ [Nothing]

코드는이를지나 확장되지만 동일한 컨텍스트에서 다시 발생하는 동일한 오류입니다.

Chepner

문제는 ys유형 [Maybe Float]이 아니라 Float. 0.0type이 없다는 오류가 발생할 수 있습니다 Maybe Float. 그러나 그것은 0.0그 자체가 타입이 없기 때문에 그것 보다 더 복잡 합니다 Float; 유형이 Fractional a => a있습니다.

유형 클래스가 열려 있기 때문에 유형 검사기는 type 값을 제공 0.0 할 수 있다고 믿습니다 Maybe Float. 하지만 그렇게하려면 .NET Fractional용 인스턴스 를 정의해야합니다 Maybe Float. 그렇지 않은 경우 오류 메시지가 알려줍니다.

해결책은 함수에 올바른 값을 제공하는 것입니다 : use Just 0.0, not 0.0.

createDistList :: WAdjList -> Int -> Int -> [Maybe Float] -> [Maybe Float]
createDistList [] i j ys = if i == j then ys ++ [Just 0.0] else ys ++ [Nothing]

또는 더 짧게,

createDistList :: WAdjList -> Int -> Int -> [Maybe Float] -> [Maybe Float]
createDistList [] i j ys = ys ++ [if i == j then Just 0.0 else Nothing]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사