0

値を格納するために配列内のどの位置が使用されるかを計算するプロローグを作成する必要があります。ただし、これらの計算の結果は整数を返す必要があるため、floor/1述語を使用して値の整数を取得しますが、これは私のコードでは機能しません。3 ではなく 3.0 のように、小数点付きの数値を返し続けます。

以下は私のコードです:

assign_value(El, NumberArray, RowNumber, I) :-
    ground(El),
    Number is NumberArray[El],
    Col is I/3,
    Row is RowNumber/3*3,
    Sum is floor(Col + Row + 1),
    subscript(Number, [Sum], El).
assign_value(_, _, _, _).

の結果がSum is floor(Col + Row + 1)整数になることはなく、その理由はわかりません。誰でもこれで私を助けることができますか?

4

3 に答える 3

2

ISO Prolog では、評価可能なファンクターfloor/1は署名として持っています (ISO/IEC 13211-1 の 9.1.1):

F階→I階

したがって、浮動小数点を期待して整数を返します。

ただし、最初に整数から浮動小数点数を作成し、次にそれらを整数に戻すことが望ましいとは思いません。代わりに、常に整数のままにする(div)/2代わりに使用することを検討してください。(/)/2

于 2014-04-15T17:17:34.520 に答える
1

floor/2 のドキュメントから ( http://www.eclipseclp.org/doc/bips/kernel/arithmetic/floor-2.html )

結果の型は引数の型と同じです。タイプを整数に変換するには、 を使用しますinteger/2

例えば:

...,
Floor is floor(Col+Row+1), Sum is integer(Floor).
于 2014-04-15T17:01:04.773 に答える