Hi all !

Hehe Impressive !

"The data models of the two languages are
vastly different."

Hmm..lists and lists of lists does not seem that far from generalized arrays. 
The basic types are similar or the same I guess ? I guess Raul had a solution 
for our normal arrays ?

Cheers,

Erling

-----Original Message-----
From: [email protected] [mailto:[email protected]]on
Behalf Of Boyko Bantchev
Sent: den 2 oktober 2009 23:05
To: Chat forum
Subject: Re: [Jchat] Haskell


2009/10/2 Erling Hellenäs <[email protected]>:
> ... When I work in Haskell I miss the
> efficient notation of J and APL though. It seems you could
> create something like J as a compiled language written in
> Haskell or as an extension to Haskell. Anyone gave it a try
> or have related ideas ?

I like to consider J as a mariage of two relatively independent
languages: one for array manipulation and one for functional
programming.  When programming in Haskell, I sometimes tend to
miss some of the ways functions can be composed in J.  So I
imitate J in Haskell.  The data models of the two languages are
vastly different, but as long as functional programming is
concerned, it is possible to add some J to Haskell.

For example, I can define:

psi f g x y = f (g x) (g y)
( or, if you prefer: psi f g x y = (g x) `f` (g y) )

which is analogous to J's dyadic &, a.k.a. the ‘Ψ-combinator’
elsewhere.  In turn, this makes it possible to define, e.g.:

comparing = psi compare

( assuming the type for the function comparing:
comparing :: Ord a => (b -> a) -> b -> b -> Ordering .)

Now, in order to sort a list of values according to their
projections under function f, I can use the following function:

sortBy $ comparing f

E.g.,

(sortBy $ comparing snd) [(2,1),(3,0),(4,10),(5,-2),(6,4)]

returns

[(5,-2),(3,0),(2,1),(6,4),(4,10)]

If I also define this combinator:

o f g x y = f (g x y)

(analogous to J's dyadic @), and then

f1   = psi (==) abs
f1'  = psi (<) abs
f2   = psi (abs`o`(-)) abs
f3   = psi (+) (^2)
f3'  = psi (sqrt`o`(+)) (^2)
f3'' = foldr1 f3'

here is what each of the six functions computes:

f1    |a|=|b|
f1'   |a|<|b|
f2    ||a|-|b||
f3    a²+b²
f3'   √(a²+b²)
f3''  √(a²+b²+…)

You can see that borrowing a bit of J fits Haskell pretty well.
I wouldn't go too far in the way of interpreting J in Haskell,
though.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to