2017-10-03 6 views
2

튜플 목록을 튜플 목록으로 변환하고 튜플의 첫 번째 목록을 원본 튜플 요소의 첫 번째 요소로 구성합니다. 예 :튜플 목록을 OCaml의 튜플 목록으로 변환

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

다음과 같이하십시오.

나는 아래의 코드에 따라 [1; 3; 5]을 얻으려고 몇 번이고 성공했습니다. 내가 어떻게 튜플의 두 번째 목록 요소를 얻는 방법 아무 생각이 없다 그러나

let rec convert lst = 
    match lst with 
    |[]->[] 
    |(a,b)::tl->a::(convert tl) 

[4 2 6] 어떻게 하나의 튜플에 병합하는 방법.

+0

작업중인 솔루션은 꼬리 재귀가 아니며 꼬리 재귀 적으로 수행하는 방법이 있습니다. @ PatJ의 대답으로 당신의 마무리를 시도하고 꼬리 재귀를 시도해보십시오, 실제로 쉽고 좋은 훈련입니다. ;-) – Lhooq

답변

4

가장 간단한 방법은 convert 기능을 수행하려는 표준 라이브러리의 List.split을 사용하는 것입니다.

이제 연습 문제의 일부인 경우 전체 솔루션을 제공하지는 않지만 여기에 몇 가지 지침이 있습니다.

먼저 목록의 튜플을 반환해야합니다. 분명히 빈 목록의 일치는 빈 ​​목록 쌍을 반환해야합니다.

자, 까다로운 부분은 (a,b)::tl이라고 가정하면 먼저 이되는 것이 분명합니다. let (tla,tlb) = convert tl에 글을 쓰면 무엇을 할 수 있습니까? 지금 해결할 수 있습니까?

+0

나는 이것에 관해 약 1 시간을 붙이려고 노력했고, 마침내 그것을 해결했다! 고마워. – dongsu