2013-02-17 2 views
0

smlnj는 op +와 같은 오버로드 된 연산자를 사용하여 int를 기본적으로 사용합니다. 이제는 함수를 실제 * real -> real로 반환하고 싶습니다. 인라인 방식으로 어떻게 할 수 있습니까?smlnj에서 기본값이 아닌 오버로드 된 연산자를 사용합니다.

"인라인 방법은"새 발 바인딩 같은 것을하지 의미 : 내 기억이 맞다면, 몇 가지 문법이 단지 같은 것을 할 SML 실제에 연산 + "를 캐스팅"허용입니다

fun add(x:real,y:real) = x + y; 

을하지만, 어디서나 찾을 수는 없습니다.

답변

2

SML로 실제 답변을 입력하면 op+이 될 수 있습니다.

당신은으로 제안 할 수

  • , 당신이 무엇을 적 코드에 따라 유형은 따라서 유형의 실제의 수 op+에 매개 변수를 적용, 주변 기능을 주석을 달 수 있습니다. 당신은 또한 기능 nonfixing 때문에

  • (아마도 고차 함수로 사용을?), 당신은 단지뿐만 아니라 실제 모듈 Real.+

  • 에서 추가 기능을 함께 전달할 수 또는 당신은처럼 주석을 달 수있다 이 : op+ : real * real -> real, 정말 못생긴하고 어리 석고, 당신은 Real.+ 대신 사용할 수 있다고 생각합니다. 그러나 그것은 선택 사항입니다.

0

연산자의 기본 인스턴스가 값 유형에 필요한 인스턴스가 아닌 경우 피연산자에 유형 주석을 사용하여 원하는 입력을 시행 할 수 있습니다. 예를 들어

,

val f = fn a => a + a 

int -> int가 입력 될 때,이 값

val g = fn a:real => a + a 

real -> real를 입력한다.

0

당신은 당신이 함수를 정의 범위에

open Real 

를 선언 할 수 있지만, 나는 강력히에 대해 조언한다. 함수에 유형 주석 달기가 가장 좋습니다. 모든 매개 변수에 주석을 달 필요가 없습니다. btw를 사용하면 충분합니다.이 경우 반환 유형도 가능합니다.

fun add(x : real, y) = x + y 

fun add(x, y) : real = x + y 
관련 문제