Search code examples
prologiso-prologeclipse-clp

The result of Sum is floor(Col + Row + 1) is never an integer and I don't know why


I have to write a piece of prolog where I have to calculate which position in an array is used to store a value. However the result of these calculations should return an integer, so I use the floor/1 predicate to get myself the integer of the value but this doesn't work in my code. It keeps returning a number with decimal point, for example 3.0 instead of 3

The following is my code:

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(_, _, _, _).

The result of the Sum is floor(Col + Row + 1) is never an integer and I don't know why. Can anyone help me with this?


Solution

  • From the documentation of floor/2 (http://www.eclipseclp.org/doc/bips/kernel/arithmetic/floor-2.html)

    The result type is the same as the argument type. To convert the type to integer, use integer/2.

    For example:

    ...,
    Floor is floor(Col+Row+1), Sum is integer(Floor).