2012-10-16 6 views
0
fun min [] = [] | min (h::t) = if h < (min t) then h else (min t) 

위의 이유는 무엇입니까? 도와주세요! 감사합니다.정수 목록에서 가장 작은 값을 찾는 방법은 무엇입니까?

오류 메시지 : 빈 목록의 경우

stdIn:1.37 Error: overloaded variable not defined at type 
    symbol: < 
    type: 'Z list 
+0

무엇이 오류입니까? –

+0

@RB. 'stdIn : 1.37 오류 : 오버로드 된 변수가 기호로 정의되지 않았습니다. 기호 : < 유형 : 'Z list' 죄송합니다. 여기에 줄 바꿈이없는 이유를 모르십니까? – sc1013

+0

죄송합니다. – sc1013

답변

1

, 당신은 유형이 같은 h 또는 min t 같은 요소의 종류와 호환되지 않는 빈 목록을 반환합니다.

몇 가지 수정 :

  1. 빈 목록은 가장 작은 값이없는 예외적 인 경우이다. 예를 들어 예외를 제기해야합니다. Empty.
  2. 단 하나의 요소로 구성된 목록의 기본 사례를 잊어 버렸습니다.

그래서 함수의 골격은 다음과 같습니다

fun min [] = raise Empty 
    | min [x] = ... 
    | min (x::xs) = ... 
0

이 경우 옵션 유형을 활용하는 것이 더있을 수 있습니다. 예외를 처리 할 필요가 없지만이 함수를 호출 할 때마다 NONE 경우를 적절히 처리해야합니다.

fun smallest [] = NONE 
    | smallest (x::xs) = case smallest xs of 
         NONE => SOME x 
        | SOME y => if x < y 
           then SOME x 
           else SOME y 
관련 문제