두리스트의 데카르트 곱을 만드는 함수를 작성하는 방법은 무엇입니까? 예를 들어OCaml에서 두리스트의 pairwise 제품을 만드는 방법은 무엇입니까?
,이
[a;b;c][d;e;f]
이 그리고이
[a*d;b*e;c*f]
이 필요하십니까?
두리스트의 데카르트 곱을 만드는 함수를 작성하는 방법은 무엇입니까? 예를 들어OCaml에서 두리스트의 pairwise 제품을 만드는 방법은 무엇입니까?
,이
[a;b;c][d;e;f]
이 그리고이
[a*d;b*e;c*f]
이 필요하십니까?
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
을 사용하여 각 쌍의 결과를 만들 수 있습니다.
고마워요.하지만이 기능이 더 일반적이어서 목록을 선언 할 수 없습니다. – adirl20081081
미안하지만 숙제를 도와 줄 수 없습니다. 재귀 함수 작성에 도움이되는 패턴 일치를 사용하십시오. –
나는 OCaml 개발을 한 적이 없지만 기능적 배경이 있기 때문에 찾고있는 기능의 이름은 보통'zip'입니다. [this site] (http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html)에 따르면 귀하의 의도와 일치하는 것으로 보이는 'combine'라는 목록에 함수가있는 것 같습니다. ,하지만 그 참조가 얼마나 권위 있는지 모르겠다. –
예, List.combine이 수행합니다. 그러나 이것은 숙제처럼 보이는데,이 경우 List 모듈의 함수는 아마 금지되어 있습니다 ....? –
이것은 데카르트 제품이 아닙니다! (a, f), (b, d), (b, e), (b, f), (c, d), (d, e) c, e); (c, f)] – vog