datascript icon indicating copy to clipboard operation
datascript copied to clipboard

Rules error

Open Tavistock opened this issue 7 years ago • 2 comments

After asking a couple of questions on the datascript slack, @tonsky asked me to make a gist with my error in it. The function (connected x y) should return a set of all diagonal neighbors of neighbors on a cartesian grid but in cases where the (= x y) it ignores neighbors that are also (= x y).

The gist is at https://gist.github.com/Tavistock/6305de1b890e3a60489544ae139b102f. for background this is for implementing a game of checkers or draughts.

This image shows the degenerate case where the orange highlighted checker is selected and the green squares are it's connected. Notice that (= x y) for the checker. screen shot 2017-11-04 at 2 30 19 pm

This image shows the correct highlighting when selecting a different piece and using connected. Notice that (!= x y) for the checker. screen shot 2017-11-04 at 2 30 34 pm

My question is whether there is an error in my code and reasoning, or if this is a problem with Datascript.

Tavistock avatar Nov 04 '17 21:11 Tavistock

I'm not sure, but shouldn't the near definition use a predicate?

[(near ?i1 ?i2)
 [(= (inc ?i1) ?i2)]]
[(near ?i1 ?i2)
 [(= (dec ?i1) ?i2)]]

Harleqin avatar Nov 06 '17 12:11 Harleqin

@Harleqin it’s actually fine. Predicate would work if both i1 and i2 are bound, what @Tavistock has is assignment, given the value of i1, calculate and assign value of i2

tonsky avatar Nov 06 '17 12:11 tonsky