((6,3,2)、(4,5,1))などのトリプルのペアをインターリーブし、このインターリーブから6タプルを作成する関数を作成しようとしています。 私はいくつかの調査をしましたが、インターリーブがどのように動作するのか理解できました。私自身の目的で何かを試してみましたが、6タプルを作成していますが、正しいインターリーブではありません。これは私のコードですOCamlでのインターリーブ
let interleave ((a, b, c), (a', b', c')) =
let sort2 (a, b) = if a > b then (a, b) else (b, a) in
let sort3 (a, b, c) =
let (a, b) = sort2 (a, b) in
let (b, c) = sort2 (b, c) in
let (a, b) = sort2 (a, b) in
(a, b, c) in
let touch ((x), (y)) =
let (x) = sort3 (x) in
let (y) = sort3 (y) in
((x),(y)) in
let ((a, b, c), (a', b', c')) = touch ((a, b, c), (a', b', c')) in
(a, b', a', b, c, c');;
私はどのような機能を使って適切なインターリーブ形式を実現できるか教えてください。なぜこのようにしようとしているのか尋ねる場合に備えて、再帰とリストについて学んだことはありません。 ありがとうございました。
私はあなたがしようとしていることを理解していません。私には「interleave」とは、「interleave((a、b、c)、(a '、b'、c '))=(a、b、b'、c、c ');; ';しかし、あなたのコードからは、それ以上のことをしようとしていることは明らかです。あなたはあなたの機能にどのような振る舞いを持たせたいのか正確に説明できますか? – ruakh
正直言って私は迷っています。上で述べたように、インターリーブにはある種のパターンがあると思いました。私は与えられた記述を誤解したと思う。このようなものでした。「トリプルの場合にペアを使用して作成できる最大値を表す6タプルを形成する関数です。だから、私は2つのトリプルから最大値を作成しようとしている。私は今明らかに私は非常に混乱していることを願っています。ありがとう –