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