Haskell’s lazy evaluation is also more complex than it might seem at first glance: it’s not quite the same as non-strictness, and in particular in a proper lazy language various data structures are more efficient due to caching &c.
Cheers, Vanessa > On Jan 8, 2020, at 12:28 PM, Raul Miller <rauldmil...@gmail.com> wrote: > > On Tue, Jan 7, 2020 at 8:24 PM Raoul Schorer <raoul.scho...@gmail.com > <mailto:raoul.scho...@gmail.com>> wrote: >> 'Is it possible to define infinite data structures and operate on them in >> J?' > > There are an infinity of infinities and any useful approach at > representing infinities can only handle a finite subset. > >> For example, take the first ten elements of an infinite list, as in Haskell. >> The 'F.' primitive family seems promising indeed. > > You can think of J's i. (when used without a left argument) as > representing an infinite list and its right argument as specifying how > much of that infinite list you want. And, you can use functions > incorporating i. to extend the possibilities. > > That said, Haskell is (in this context) more LISP like: with a bias > towards micro-recursions and a bias away from numeric representations > of size. J can indeed emulate that, but performance tends to suffer if > or when you don't understand how to map the micro-recursions onto > arithmetic. (Or, more simply: Haskell is a better Haskell than J is.) > > Does this help? > > Thanks, > > -- > Raul > > >> >> Le mer. 8 janv. 2020 à 01:56, Henry Rich <henryhr...@gmail.com> a écrit : >> >>> I don't understand the task at all. You might look in NuVoc for $:, F. >>> etc., and M. >>> >>> Henry Rich >>> >>> On 1/7/2020 7:51 PM, Raoul Schorer wrote: >>>> Hi, >>>> >>>> Implementing Minikanren <http://minikanren.org/> in J by translating >>> from >>>> Scheme, I stumbled on the following: >>>> I have a Scheme procedure 'fives' >>>> < >>> https://github.com/jasonhemann/microKanren/blob/master/microKanren-test-programs.scm >>>> >>>> that is passed a vector and yields a procedure that then takes a pair. >>>> ((fives (vector 0)) '(() . 0)) >>>> >>>> My problem is that this then evaluates to a pair data -- procedure: >>>> ((((#(0) . 5)) . 0) . #<procedure at microKanren-test-programs.scm:677>) >>>> >>>> The second member of the pair (the procedure) is then evaluated on demand >>>> to yield another similar structure of length n+1, therefore allowing the >>>> lazy evaluation of this infinite "stream". >>>> >>>> Is switching to iterative/eager eval the only realistic way? >>>> Can someone help me with lazy eval of infinite structures in J, or give >>> me >>>> pointers to resources on the topic? >>>> >>>> Thanks! >>>> Raoul Schorer >>>> ---------------------------------------------------------------------- >>>> 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 > <http://www.jsoftware.com/forums.htm> ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm