• Re: distinction?

    From B. Pym@21:1/5 to Kent M. Pitman on Fri Jul 5 19:09:07 2024
    Kent M. Pitman wrote:

    Even non-programmers know
    what it means to say "For every setting at the table, make sure the napkin is arranged right".

    This can be expressed functionally in Scheme using map (like mapcar in CL). It's not necessary to use iteration.

    But MAP is not good for expressing "For every number from 0 to 9, make sure it appears on the phone dial" because Scheme does not provide an object
    over which one can "map" numeric ranges, as CL's LOOP does.

    Gauche Scheme:

    (define phone-dial '(0 1 2 3 4 5 6 7 8 9))

    (every (cut member <> phone-dial) (iota 10))
    ===>
    (9)

    (every (cut member <> phone-dial) '(2 6 8 22))
    ===>
    #f

    (find (lambda(x) (not (member x phone-dial))) '(2 6 8 22))
    ===>
    22

    (use srfi-1)

    (lset-difference = '(2 6 8 22) phone-dial)
    ===>
    (22)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to Kent M. Pitman on Fri Jul 5 21:21:09 2024
    Kent M. Pitman wrote:

    I guess my point is that some things "feel" recursive and should be expressed recursively. But some things "feel" iterative, and I don't see anything wrong
    with:

    (loop for entry in some-list
    for name = (person-name entry)
    for age = (person-age entry)
    collect (list name age))

    Abysmal.

    (map
    (lambda (entry) (list (person-name entry) (person-age entry)))
    some-list)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kaz Kylheku@21:1/5 to B. Pym on Sat Jul 6 00:50:14 2024
    On 2024-07-05, B. Pym <No_spamming@noWhere_7073.org> wrote:
    Kent M. Pitman wrote:

    I guess my point is that some things "feel" recursive and should be expressed
    recursively. But some things "feel" iterative, and I don't see anything wrong
    with:

    (loop for entry in some-list
    for name = (person-name entry)
    for age = (person-age entry)
    collect (list name age))

    Abysmal.

    (map
    (lambda (entry) (list (person-name entry) (person-age entry)))
    some-list)

    TXR Lisp:

    (mapcar [juxt .name .age] person-list)

    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @Kazinator@mstdn.ca

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)