I can only comment on the solutions [0, 1] I wrote: I would be very
surprised if (as written) they provide a practical solution to the
production of efficient (anonymous) recursive verbs.

[0] Y combinator - Rosetta Code
<https://rosettacode.org/wiki/Y_combinator#Non-tacit_version>

[1] Y combinator - Rosetta Code
<https://rosettacode.org/wiki/Y_combinator#Tacit_version>


On Tue, Oct 5, 2021 at 8:24 AM Raoul Schorer <raoul.scho...@gmail.com>
wrote:

> Does that mean we could consider making the Y combinator part of the
> language as a library or primitive function?
>
> Speaking only for myself, I am very much in support of better recursion
> support in the language, since I usually draw my inspiration from Scheme
> programs.
>
> Cheers,
> Raoul
>
> Le mar. 5 oct. 2021 à 14:02, Raul Miller <rauldmil...@gmail.com> a écrit :
>
> > This is an old subject, which may no longer have motivation and/or
> > interest, but it occurred to me, today, that it ought to be possible
> > to avoid stack errors from recursive verb implementations by using the
> > Y Combinator.
> >
> > https://rosettacode.org/wiki/Y_combinator#J
> >
> > FYI,
> >
> > --
> > Raul
> >
> > On Mon, May 24, 2021 at 10:11 PM Thomas McGuire <tmcguir...@gmail.com>
> > wrote:
> > >
> > > For those interested in Benchmarks I have split my original benchmark
> > routine into 2 scripts. One the Kernighan/Van Wyk benchmarks and an
> > advanced benchmarks script. The advanced benchmarks were taken from some
> of
> > the functionality that the Scheme language benchmarks for which I found J
> > implementations.
> > >
> > > The deriv benchmark uses Raul’s suggestion with the polynomial taken
> > from the data from the Scheme implementation. Itwon’t be a direct
> > comparison to Scheme since Scheme does a full symbolic differentiation
> > allowing undefined variable coefficients. In this respect the Scheme
> > benchmark tests parsing nested S-expressions.
> > >
> > > I added a QR decomposition benchmark from the QR essay and compare it
> to
> > the foreign 128!:0. I also include a Schwarz-Rutishauser QR decamp
> > implementation. This is translated from python code and uses for loops so
> > on large matrices it is very slow. I comment out the test in the test
> > harness.
> > >
> > > Finally I added a matrix multiplication test given the recent
> discussion
> > on Matrix multiplication on the programming forum. The test takes the Q
> and
> > R matrices and multiplies them for timing. I added a match check on the
> > original matrix since the data is randomly produced.
> > >
> > > The scripts are available at:
> > > https://github.com/tmcguirefl/JBenchmarks
> > >
> > > J902 on MacBook Pro Intel I7 quad core 2.9GHz
> > >    ADVbmarks ''
> > > tak: 0.045548 17344
> > > fibN: 1e_6 13376
> > > rsum: 0.005007 5.02125e6
> > > mbrot: 0.875056 199360
> > > deriv: 2.7e_5 9728
> > > fftw: 0.000489 1.5751e6
> > > ifftw: 0.000717 2.09894e6
> > > ft: 3.4e_5 6528
> > > fftws: 1.8e_5 5696
> > > QRdata size: 700 400
> > > QRrec: 0.079073 3.62602e7
> > > QRfor: 0.090745 6.08386e7
> > > MMult: 0.176499 3.3557e7
> > > Match: 1 (not a timing, checks orig matrix matches the mult. QxR)
> > >
> > > Of note to the matrix multiply discussion is that a 700x400 matrix
> takes
> > less than a second on macOS 64 bit in J902. Granted the R matrix is upper
> > triangular but if optimizations are taking place it is under the covers,
> > since this is a straight J +/ . * implementation.
> > >
> > > On J807 I took out the deriv and the rsum due to errors (my 806 doesn’t
> > have the calculus lib and rsum had a stack error I assume 902 has
> improved
> > recursion) and the results:
> > >    ADVbmarks ''
> > > tak: 0.069502 36032
> > > fibN: 2e_6 8512
> > > mbrot: 1.02267 200192
> > > fftw: 0.000867 1.57523e6
> > > ifftw: 0.000806 2.09907e6
> > > ft: 5e_5 6848
> > > fftws: 3.2e_5 7104
> > > QRdata size: 700 400
> > > QRrec: 0.08946 4.45858e7
> > > QRfor: 0.100718 6.13482e7
> > > MMult: 0.167292 4.29949e7
> > > Match: 1 (not a timing, checks orig matrix matches the mult. QxR)
> > >
> > > There appears to be an across the board speed up from 806 to 902 in
> > everything but matrix multiplication. That may be due to differences in
> the
> > random matrix generated for each test.
> > >
> > > > On May 19, 2021, at 5:22 AM, Raul Miller <rauldmil...@gmail.com>
> > wrote:
> > > >
> > > > deriv_jcalculus_ does symbolic differentiation on tacit expressions.
> > > > For example:
> > > >
> > > >   load'math/calculus'
> > > >   (3+*:) deriv_jcalculus_ 1
> > > > 0"0 + +:
> > > >   3 0 1&p. deriv_jcalculus_ 1
> > > > 0 2&p.
> > > >   (3+*:) deriv_jcalculus_ 1 i. 5
> > > > 0 2 4 6 8
> > > >   3 0 1&p. deriv_jcalculus_ 1 i. 5
> > > > 0 2 4 6 8
> > > >
> > > > (The right argument to deriv_jcalculus_ is how many times to take the
> > > > derivative, a negative argument does symbolic integration instead,
> > > > with an integration constant of 0. But integration is a bit fussier
> > > > than derivation, so it has less support for variant expressions.)
> > > >
> > > > FYI,
> > > >
> > > > --
> > > > Raul
> > > >
> > > > On Wed, May 19, 2021 at 4:17 AM Thomas McGuire <tmcguir...@gmail.com
> > <mailto:tmcguir...@gmail.com>> wrote:
> > > >>
> > > >> Thanks Raul,
> > > >> I added your ‘tail' implementation to the code and it works without
> > issue. The KJV text is listed in reverse line order in the output file.
> > > >>
> > > >>    benchmarks ''
> > > >> sumloop: 0.227858 8.39149e6
> > > >> sumj: 0.000171 1.04986e6
> > > >> ack: 2e_6 721472
> > > >> array1: 5.6e_5 1.05107e6
> > > >> array1t: 4.8e_5 1.05107e6
> > > >> string1: 0.003969 2.88634e6
> > > >> cat: 0.01474 2.51685e7
> > > >> wc: 0.295076 1.58152e8
> > > >> tail: 0.065197 3.77133e7
> > > >> sum1: 0.12709 4.04989e7
> > > >> sum1j: 0.000547 1.18086e6
> > > >>
> > > >> I have placed the code on GitHub:
> > > >> https://github.com/tmcguirefl/JBenchmarks
> > > >>
> > > >> The scheme folks have put together a large set of benchmarks at:
> > > >> https://www.ccs.neu.edu/home/will/Twobit/benchmarksAboutR6.html
> > > >>
> > > >> When time permits I will go through them and implement the ones that
> > would be J appropriate (some do symbolic differentiation which would be
> > nontrivial for me to code into J).
> > > >>
> > > >> Tom McGuire
> > > >>
> > > >>> On May 18, 2021, at 9:04 PM, Raul Miller <rauldmil...@gmail.com>
> > wrote:
> > > >>>
> > > >>> Here's the tail benchmark written in J:
> > > >>>
> > > >>> tail=: 4 : 0
> > > >>> (;|.<;.2 freads x) fwrites y
> > > >>> )
> > > >>>
> > > >>> This is based on my reading of the C implementation of the tail
> > > >>> benchmark vs the cat benchmark, and on the cat benchmark in this J
> > > >>> implementation, except that I have failed to reproduce a bug in
> the C
> > > >>> implementation which shows up when the file contains very long
> lines
> > > >>> and instead I have assumed that the file ends in a newline (which
> is
> > a
> > > >>> valid assumption for the gutenberg kjv bible).
> > > >>>
> > > >>> Let me know if you think I have made a mistake here.
> > > >>>
> > > >>> Thanks,
> > > >>>
> > > >>> --
> > > >>> Raul
> > > >>>
> > > >>> On Tue, May 18, 2021 at 7:02 PM Thomas McGuire <
> tmcguir...@gmail.com
> > <mailto:tmcguir...@gmail.com><mailto:tmcguir...@gmail.com <mailto:
> > tmcguir...@gmail.com>>> wrote:
> > > >>>>
> > > >>>> I was going over Devon McCormick's notes from the latest NYCJUG
> > meeting. There was a discussion about Benchmarks with an example of the
> > Kernighan/Van Wyk benchmarks in LISP/Scheme. Devon had made the comment
> > that for most things people use J for that correctness overshadowed
> > performance.
> > > >>>>
> > > >>>> The K/VW benchmarks were originally made for C and seem to test
> > looping controls and memory allocation which at a time of low memory
> > minicomputers and PCs, coupled with multiple available C compilers, made
> > the benchmarks a nice way of comparing compiler implementations as well
> as
> > new processor speed.
> > > >>>>
> > > >>>> However it seemed like a simple project to exercise my J
> > programming skills with so I have attached the program to this email.
> > > >>>>
> > > >>>> Note: you will need to download the King James Version of the
> Bible
> > from project Guttenburg (not included with the attachment) to run the
> full
> > benchmarks. I also created my own file of floating point numbers to sum
> > (routine to create a file of random floats is included). I have added
> some
> > routines to accomplish similar functionality in the way I would do it in
> J
> > (at least for my mere mortal understanding of J).
> > > >>>>
> > > >>>> Running on my mac book pro (2016 with 2.9 Ghz Quad core I7) the
> > results are:
> > > >>>>
> > > >>>>  benchmarks ''
> > > >>>> sumloop: 0.214383 8.39149e6
> > > >>>> sumj: 0.000162 1.04986e6
> > > >>>> ack: 4e_6 721472
> > > >>>> array1: 0.000578 1.05107e6
> > > >>>> array1t: 2.5e_5 1.05107e6
> > > >>>> string1: 0.003237 2.88634e6
> > > >>>> cat: 0.014234 2.51685e7
> > > >>>> wc: 0.302383 1.58152e8
> > > >>>> sum1: 0.124006 4.04989e7
> > > >>>> sum1j: 0.000956 1.18086e6
> > > >>>>
> > > >>>> thought I would share
> > > >>>>
> > > >>>> Tom McGuire
> > > >>>>
> > ----------------------------------------------------------------------
> > > >>>> For information about J forums see
> > http://www.jsoftware.com/forums.htm <http://www.jsoftware.com/forums.htm
> ><
> > http://www.jsoftware.com/forums.htm <http://www.jsoftware.com/forums.htm
> >>
> > > >>>
> > ----------------------------------------------------------------------
> > > >>> For information about J forums see
> > http://www.jsoftware.com/forums.htm <http://www.jsoftware.com/forums.htm
> ><
> > http://www.jsoftware.com/forums.htm <http://www.jsoftware.com/forums.htm
> >>
> > > >>
> ----------------------------------------------------------------------
> > > >> For information about J forums see
> > http://www.jsoftware.com/forums.htm <http://www.jsoftware.com/forums.htm
> >
> > > >
> ----------------------------------------------------------------------
> > > > For information about J forums see
> http://www.jsoftware.com/forums.htm
> > <http://www.jsoftware.com/forums.htm>
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> 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