Thanks for your comments.

These were done to come up with some examples to present J to a group of
functional programmers.  I'm hoping to provide J equivalents alongside
solutions in other languages with which people may be more familiar.  I'll
take a look at coming up with a solution to hew more closely to the problem
spec but I'd like to use as much "raw" J as possible and not rely on
equivalents like the apparent built-ins "isLetter" and "toLower" in some of
the other solutions.

I wasn't very happy with the J code for the shifting problem as it does seem
too complicated for such a simple problem.

In the "One Off by Sliding" example, I'm trying to illustrate a different
way to avoid looping by using arrays rather than recursion which seems to be
a common iteration method in functional languages.  Ideally, I'd like an
example  where I can show both an array-based solution and work in some of
J's iterative methods as well - things like scan and the power conjunction.

On Tue, Aug 9, 2011 at 7:47 AM, Boyko Bantchev <[email protected]> wrote:

> > Materials for tonight's meeting are here -
> > http://www.jsoftware.com/jwiki/NYCJUG/2011-08-09 - to peruse.  Sorry, no
> > conferencing in the Heartland.
>
> Living no less than 7 time zones from NYC, I am not going to attend
> the meating anyway :)  But browsing through some of the materials,
> part of them, in my opinion, hardly demonstrate any advantages of
> coding in J (if they are meant to do that at all).  Here are comments
> on two titles.
>
>
> `One Off by Sliding'
> ====================
>
> The proposed J solution solves a somewhat restricted problem: it
> appears to be specialized on strings rather than applying to any
> sequence.  And regarding the string case -- which is meant by the
> original poster to be merely an illustration -- the J program gets
> even more specialized by interpreting the phrase `not preceded by
> a letter' to mean `possibly preceded by a space character'.
> In fact, it even works erroneously if the argument string contains
> something else beside letters and space chars.
>
> More importantly, the J program does not address the deeper problem
> as stated by the original poster, i.e. to find a form of abstraction
> that would not require special-casing the first (or last) item as
> the sequence gets shortened.
>
>
> `A Functional Approach to Shifting Certain Array Elements'
> ==========================================================
>
> Once more, the J program in this article solves a restricted
> problem and not the one originally posted.  The latter requires
> that the solution deals with sequences of arbitrary type, to
> which it should be able to apply any relevant predicate.  The J
> program only works for strings, and actually only for strings of
> letters (ending abnormally for other strings).  Moreover, the
> check it does (for upper-case letters) is `wired-in' in it.
>
> I should add that, even though the J program solves a simpler problem,
> its size and complexity hardly make it attractive, compared to the
> simple and direct imperative solution by `huynhjl'.
>
> Of course, most other solutions were unnecessarily complicated, too.
> For a contrast, in Haskell one would write, instead:
>
> shift p zs = f zs where
>  f (x:zs@(y:zs')) | not (p y) = x : f zs
>                   | p x       = x: y : f zs'
>                   | otherwise = y : f (x:zs')
>  f zs = zs
>
> Or, avoiding explicit recursion:
>
> shift p xs = reverse $ maybe as (:as) m where
>  (as,m) = foldl f ([],Nothing) xs
>  f (as,m) x = if p x then (x:as,m) else (maybe as (:as) m, Just x)
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm




-- 
Devon McCormick, CFA
^me^ at acm.
org is my
preferred e-mail
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to