2015-01-13 2 views
-3

두리스트의 데카르트 곱을 만드는 함수를 작성하는 방법은 무엇입니까? 예를 들어OCaml에서 두리스트의 pairwise 제품을 만드는 방법은 무엇입니까?

,이

[a;b;c][d;e;f] 

이 그리고이

[a*d;b*e;c*f] 

이 필요하십니까?

+0

나는 OCaml 개발을 한 적이 없지만 기능적 배경이 있기 때문에 찾고있는 기능의 이름은 보통'zip'입니다. [this site] (http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html)에 따르면 귀하의 의도와 일치하는 것으로 보이는 'combine'라는 목록에 함수가있는 것 같습니다. ,하지만 그 참조가 얼마나 권위 있는지 모르겠다. –

+0

예, List.combine이 수행합니다. 그러나 이것은 숙제처럼 보이는데,이 경우 List 모듈의 함수는 아마 금지되어 있습니다 ....? –

+0

이것은 데카르트 제품이 아닙니다! (a, f), (b, d), (b, e), (b, f), (c, d), (d, e) c, e); (c, f)] – vog

답변

2

List 모듈의 combine 모듈이 요구 사항에 적합하다고 보입니다. See documentation

샘플 사용법 : 함수가 두 목록을 필요로

let x = [1; 2; 3] 
let y = [4; 5; 6] 
List.combine x y (* => [(1, 4); (2, 5); (3, 6)] *) 

주 같은 길이 될 수 있습니다. 더 융통성있게 사용하려면 직접 작성해야합니다.

임의의 함수를 사용하여 목록을 결합하려는 경우 List.combine을 사용하여이 튜플 목록을 만든 다음 List.map을 사용하여 각 쌍의 결과를 만들 수 있습니다.

+0

고마워요.하지만이 기능이 더 일반적이어서 목록을 선언 할 수 없습니다. – adirl20081081

+2

미안하지만 숙제를 도와 줄 수 없습니다. 재귀 함수 작성에 도움이되는 패턴 일치를 사용하십시오. –