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:
Personally, I use "mostly" coding guidelines. I recognize that there
will need to be cases where I do not comply with my own guidelines,
but I use these guidelines when I have no reason to do something
different:
No space between name and copula. This makes it easy to search for
assignments to a name.
Case of name represents type assigned to name. NOUNS, verbs,
Adverbs/Conjunctions
Feel free to ignore these...
> 1) how do I avoid @ especially once we remove explicit arguments?
@ is function composition. It looks ugly because J limits itself to
ASCII sequences for its language. What we would ideally want is a
character that looks like a small circle (but elevated slightly, to
avoid confusion with the letter o) But ASCII itself is ugly --
ASCII's value is not its beauty but its ubiquity. That said, here are
some equivalent cases:
f@g
f@:g"g
([: f g)"g
f&g@(]"g)
f&:g@(]"g)
Depending on your context, you may be able to remove @(]"g) or "g and
still retain equivalence, and additional equivalences may also be
valid. For example:
f@g y
f&g y
f&> <&g y
> 2) how do I avoid constant boxing/unboxing due to fill (see arcsX)?
Here are some alternative arcsX definitions:
arcsX1=: [: ; [ ,.&.> {
arcsX2=: [ ((#~ #@>) ,. ;@]) {
> 3) Is a boxed value always a pointer? One could imagine implementing
> 'ragged' arrays without pointers.
That is how they are currently implemented, yes.
> 4) Is there a good way to have named variables (ie. avoid getx, gety)?
Define "good"...
One option is to use explicit code -- the definition of "explicit
code" is essentially "named variables".
> 5) Why is a hook the default and not composition?
It's historical:
http://www.jsoftware.com/pipermail/general/2006-January/026271.html
http://www.jsoftware.com/pipermail/general/2006-January/026274.html
> Code at: http://pastebin.com/k4XuKfFi
I have not taken the time to fully digest what you are doing there,
but it's possible that by characterizing the data differently the
expressions could be made more direct. I cannot guarantee this
(because I have not taken the time to understand the purpose of what
you are doing), but that has been my experience in many other
contexts.
FYI,
--
Raul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm