2012-03-05 2 views
1

나는 입력으로 3 개의 원소를 취하고 가장 작은 것에서 가장 큰 것으로 분류 된 정렬 된 목록을 반환하는 표준 ml 함수를 만들려고한다. 나에게 최소, 최대 및 중간 요소를 가져 오는 3 가지 도우미 메서드를 사용했습니다. 의 int를 처리 할 때표준 ml 정렬 3 요소

- fun min3 (a, b, c):real = 
    if a < b andalso a < c then a 
     else if b < a andalso b < c then b 
     else c; 

- fun mid3 (a, b, c):real = 
    if (a < b andalso a > c) orelse (a > b andalso a < c) then a 
     else if (b < a andalso b > c) orelse (b > a andalso b < c) then b 
     else c; 

- fun max3 (a, b, c):real = 
    if a > b andalso a > c then a 
    else if b > a andalso b > c then b 
     else c; 

- fun sort3 (a, b, c):real = 
    min3(a, b, c)::mid3(a, b, c)::max3(a, b, c)::[]; 

다음은 완벽하게 작동하지만, 내가 실수로 변경하는 경우, 헬퍼 방법이 올바른 결과를 반환하지만 (다음이다 정렬 방법을 입력 할 때 나는 오류 : 코드는 다음과 같습니다

enter image description here

어떤 코드에서 잘못 될 수 : 난 스크린 샷을)했다, 그래서 오류 텍스트를 복사 couldnt는? 감사합니다

또한 여기에 게시 된 방법 이외의 3 가지 요소를 정렬하는 또 다른 방법이 있습니까?

답변

0

유형을 변경하면 반환 값이 sort3 인 실수를 저지른 것입니다. 오류 메시지는 sort3이 실제를 반환한다고 선언했음을 알려주고 있으며 실제로는 실제 목록을 반환합니다.

+0

도우미 메서드로 각 요소를 반환하고 @ 연산자로 연결 한 경우 그 결과를 목록으로 알 수 있습니까? –

+0

@ aizen92 이미 목록을 반환한다는 것을 알고 있습니다. 문제는 당신이'fun sort3 (a, b, c) : 진짜 ' – sepp2k

+0

을 작성할 때 진짜를 반환해야한다고 명시 적으로 말했지만, 나는 진짜로 돌아가고 싶다. 나는이 방법을 진짜로 만 만들고 싶다. –