Unfortunately, I do not know what "works" means. Maybe if this was
wired up to a sudoku solver, I could see it in action -- I know how to
test a sudoku solution for correctness.
Anyways, here's the case I am struggling with right now:
A=: (|:++:) #:0 8 4 4
C=: (a:,];|:) #:0 6 11 1
D=: #:9 0 0 4
(0{"1 ($#:I.@,)*A) *.//. ((> @ {&C @ {::&A) revDom ({&D))"1 ($#:I.@,)*A
This is actually a rather boring case, the result here is 4 4 $ 0, but
I want to make sure that those zeros are being generated in a way that
I understand.
So...
If I look at an intermediate result here:
(({&D))"1 ($#:I.@,)*A
I get a sequence of pairs of rows selected from D
And, if I look at subsequent intermediate results:
([: getx ({&D))"1 ($#:I.@,)*A
([: gety ({&D))"1 ($#:I.@,)*A
I can see that we are pulling out the first and second of the pairs of rows.
So here's the issue I am struggling with: are the values represented
here by the row index and column index in A both valid as row indices
into D, or should the column index in A be a column index in D?
The comment on D says:
NB.* 'D' is the domain of each variable, one row per variable.
but I am not sure what that means.
The comment on A says:
NB.* 'A' an adjacency matrix (which constraint is between a pair of variables).
I think I know what that means, but my supposed understanding is not
helping me understand D.
Any insights appreciated.
Thanks,
--
Raul
On Sun, Nov 4, 2012 at 2:30 PM, Raul Miller <[email protected]> wrote:
> I'm blathering a lot here, sorry about that, but I found a case, now I
> just need to understand it:
>
> A=: (|:++:) #:0 8 4 4
> C=: (a:,];|:) #:0 6 11 1
> D=: #:9 0 0 4
>
> Now to see if I can understand what's happening here...
>
> I will try to refrain from posting my incomplete thoughts -- I'll try
> to come back with something that works.
>
> Thanks,
>
> --
> Raul
>
> On Sun, Nov 4, 2012 at 2:18 PM, Raul Miller <[email protected]> wrote:
>> In revise, you are using a pair for your right argument.
>>
>> It looks to me like this might be unnecessary -- that you could use
>> ys=. I.+./"1 D
>>
>> But this does not exactly reproduce your algorithm. So if this change
>> breaks your algorithm, could you find an example situation which
>> illustrates this issue?
>>
>> Thanks,
>>
>> --
>> Raul
>>
>> On Fri, Nov 2, 2012 at 1:01 AM, Michal D. <[email protected]> wrote:
>>> Hi All,
>>>
>>> I've managed to write my first not-completely-trivial program in J. It
>>> implements an arc consistency algorithm (
>>> http://en.wikipedia.org/wiki/Local_consistency#Arc_consistency). I would
>>> appreciate any comments regarding style, what I'm doing wrong in J or how
>>> to improve the code. I also have a couple of questions of my own:
>>>
>>> 1) how do I avoid @ especially once we remove explicit arguments?
>>> 2) how do I avoid constant boxing/unboxing due to fill (see arcsX)?
>>> 3) Is a boxed value always a pointer? One could imagine implementing
>>> 'ragged' arrays without pointers.
>>> 4) Is there a good way to have named variables (ie. avoid getx, gety)?
>>> 5) Why is a hook the default and not composition?
>>>
>>> Code at: http://pastebin.com/k4XuKfFi
>>>
>>> Cheers!
>>>
>>> Mike
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm