私はSMLの学習を始めました.2つのintとタプルのリストを取り、リストを返すプログラムを作成したいと思います(ボックスはリストです)。リストには常に2つのタプルがあります。いくつかのif条件では、タプル内の要素の量を変更する必要があります。たとえば、私はXb1を定義し、それにタプルの最初の要素(#1頭)の量を与え、その後、コード内のXb1の量を変更してリストを返します。しかし問題は、この金額は変更されないということです。SML - タプルのリスト内のタプル要素の値を変更する
fun MoveBoxL(Xw,Yw,boxes:(int * int)list) : BOXES =
let
val head = List.hd boxes
val tail = List.hd boxes
val Xb1= #1(head)
val Yb1 = #2(head)
val Xb2 = #1(tail)
val Yb2 = #2(tail)
in
if Yw=1 then boxes
else if head=(Xw,1) andalso Yw=2 then boxes
else if tail=(Xw,1) andalso Yw=2 then boxes
else if Yw=3 andalso head=(Xw,1) andalso tail=(Xw,2) then boxes
else if Yw=3 andalso tail=(Xw,1) andalso head=(Xw,2) then boxes
else if head=(Xw, Yw-2) andalso tail=(Xw, Yw-1) then (Yb1=Yb1-1 ; Yb2=Yb2-1 ; boxes)
else if head=(Xw, Yw-1) andalso tail=(Xw, Yw-2) then (Yb2=Yb2-1 ; Yb1=Yb1-1 ; boxes)
else if head=(Xw,Yw-1) then (Yb1=Yb1-1 ; boxes)
else if tail=(Xw,Yw-1) then (Yb2=Yb2-1 ; boxes)
else boxes
end;
cpn tools picture 間違っているものです: ここでは、コードのですか?
'(Yb1 = Yb1-1; Yb2 = Yb2-1;ボックス)'ほとんど意味がありません。 'boxes'を返すだけです。例外を除いてあなたの句のすべては '箱'をそのまま返します。あなたは必然的に考えています。 'boxes'は変更されません。また、 'Yb1 = Yb1-1'も同等のテストに過ぎません。値falseが返され、破棄されます。あなたは、 '(Yb1 = Yb1-1; Yb2 = Yb2-1; boxes)'という何らかの 'let ... in ... end'構造をしようとしているようです。いずれにせよ、あなたは 'BOXES'の定義を示すべきです。それが何であるかを推測する必要はありません。 –
Yb1の量を変更するにはどうしたらいいですか?金額を増減してから変更した値を返すにはどうすればよいですか? – helen
この場合、 'boxes 'にしたい値を直接返すだけです。私はあなたのコードの意図がやや不明確であることを知っているので、それが何であるかは本当に分かりません。 –