2017-11-15 22 views
-1

저는 ML에 익숙하지 않아 이해하기 위해 최선을 다하고 있습니다.ML 함수 쓰기

길이가 같은 두 개의 목록을 입력으로 사용하고 첫 번째 입력 목록과 두 번째 입력 목록에서 각각 요소가 교대로 추출되는 출력 목록을 생성하는 alternate : 'a list -> 'a list이라는 ML 함수를 작성하십시오.

alternate ([1,3,5],[2,4,6]) = [1,2,3,4,5,6] 

이 내 작품 : fun alternate (x::xs,y::ys) = x::alternate(x,y);

+0

[도움말/on-topic] : * 3. 숙제 도움을 요청하는 질문에는 문제를 해결하기 위해 지금까지 해 온 작업의 요약과 해결하려는 어려움에 대한 설명이 포함되어야합니다 .__ – glennsl

+0

제공 한 유형 서명 ('alternate :'a 목록 -> '목록')이 나머지 질문과 일치하지 않습니다 ('대체 목록 :'목록 - '목록 -'목록 '). 어떤 경우에는 여기 힌트가 있습니다 : 재귀 적 경우는 두 개의 인수의 순서를 바꾸는 것을 포함 할 수 있으므로 하나의 호출에서'x'의 역할은 다음에'y'의 역할을하고, 그 반대의 경우는 –

답변

1

당신은 두 문제를 분리 : 재귀 케이스와 기본 케이스. (1) 반복적 인 경우 문제의 일부 단위를 해결합니다.이 경우 각 목록의 단일 요소를 결과 앞에 배치하고 재귀 적으로 같은 방식으로 나머지 문제를 해결하려고합니다. (2) 기본 경우 목록은 비어 있으며 결과는 빈 목록입니다.

fun alternate (x::xs, y::ys) = x::y::alternate(xs, ys) 
    | alternate ([], []) = [] 
    | alternate _ = raise Fail "xs and ys don't have the same length" 

(3) 함수가 짝수 길이의 입력이 잘 정의되어 있기 때문에, 하나는 비어 있고 다른 곳리스트를 포함하는 두 개의 튜플 일치 _ 포괄 패턴 없으며 예외가 발생합니다.

+0

당신의 자세한 설명을 주셔서 감사합니다 –