私はBaby Blocksの問題を解決しています。JavaコードをHaskellに翻訳する
のJava:
optHeight
は、1次元配列であると
boxes
はデータメンバとして
height, width, depth
のオブジェクトconsitingある
for (int i = 1; i <optHeight.length ; i++) {
int maxHeightIndex = 0;
for (int j = i-1; j >=0 ; j--) {
// Need help from here
if(boxes[j].width>boxes[i-1].width && boxes[j].depth>boxes[i-1].depth) {
if(optHeight[maxHeightIndex]<optHeight[j+1]) { <-- How do I write this condition
maxHeightIndex = j+1;
}
}
}
optHeight[i]=optHeight[maxHeightIndex] + boxes[i-1].height;
}
私はHaskellのに変換するJavaコードのpeiceを持っています。ハスケルでは、それは単なるリストのリストです。可変配列/変数がないため、私は全く無力です。
ハスケル:
b list = do
forM_ [1..length list] $ \i -> do
let maxHeight = 0
forM_ [0..(i-1)] $ \j -> do
if list!!j!!1 > list!!i-1!!1 && list!!j!!2 > list !!j!!2 then
maxHeight = j + 1
PS:私は完全にHaskellの
手続き型ハスケルの作成を中止します。変異の代わりに、値の変換のシーケンスについて考える。 – Caleth
あなたのJavaコードは機能していますか?その中のコメントはそうでないことを示唆しているようです。 :) – Alec
言語Yから翻訳して言語Xで書くことは、ほとんど常に非常にユニコードなコードを生成する最悪の方法の1つです。他の言語から翻訳しようとするのではなく、Haskellが提供するものを使ってアルゴリズムを表現する。 – chi