2017-03-08 1 views
1

어쨌든 목록을 취하여 가장 높은 요소와 가장 낮은 요소를 반환하는이 두 함수를 결합하십시오. 동시에 두 가지를 출력하고 싶습니다. 건배SML 두 개의 함수 (최소, 최대)를 하나의 범위로 조합하기

fun max[] = raise Empty 
    max[x] = x 
    max(x::xs) = 
    let 
    val y = max xs 
    in 
    if x > y then x else y 
    end; 

fun min[] = raise Empty 
    min[x] = x 
    min(x::xs) = 
    let 
     val y = min xs 
    in 
     if x < y then x else y 
    end; 

답변

1

여기는 힌트입니다. 동일한 기본 논리를 사용하십시오. minmax 함수를 작성하여 (min,max) 형식의 값 쌍을 반환 한 다음 재귀 적 단계에서 패턴 일치를 사용하여 두 값을 추출하십시오. 템플릿은 다음과 같습니다 위의 a에서

fun minmax [] = raise Empty 
| minmax [x] = (x,x) 
| minmax (x::xs) = 
    let 
    val (a, b) = minmax xs 
    in 
    <fill in the code> 
    end; 

는 최소 및 b 최대있을 것입니다. ab과 세 번째 값인 x이 주어진 경우 부등식의 재생 방법에 따라 (x,b) 또는 (a,x) 또는 (a,b) 중 하나를 반환하십시오. 하나 이상의 if이 필요합니다.

1

여기에는 다른 힌트가 있습니다. 반복 (iterating) 완료시 현재 (최소, 최대)를 저장하고 반복자를 반환하는 도우미 함수를 사용하십시오. 템플릿은 다음과 같습니다.

fun minmax [] = raise Empty 
    | minmax (y::ys) = 
    let fun helper [] (min, max) = ... 
      | helper (x::xs) (min, max) = ... 
    in helper ys (y, y) end 
관련 문제