Baby Blocks 문제를 해결 중입니다.자바 코드를 하스켈로 번역하기
자바 :
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;
}
optHeight
는 1 차원 배열입니다
및 boxes
는 데이터 멤버로 height, width, depth
의 객체 consiting이다 나는 하스켈로 번역 할 자바 코드의 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 : 나는 하스켈
절차 적 하스켈 작성을 중지합니다. 돌연변이 대신에 가치 변형의 연속에 대해 생각해보십시오. – Caleth
Java 코드가 작동합니까? 그것에있는 코멘트는 다르게 제안하고있는 것을 보인다. :) – Alec
언어 Y에서 번역하여 언어 X로 작성하는 것은 최악의 방법 중 하나이며, 거의 항상 고유 코드를 생성합니다. 하스켈이 다른 언어로 번역하려고하는 대신 제공하는 것을 사용하여 알고리즘을 표현하십시오. – chi