• Re: Learning Lisp in Linux?

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp,comp.lang.scheme on Sun Jun 22 20:44:57 2025
    From Newsgroup: comp.lang.lisp

    B. Pym wrote:

    Pascal Costanza wrote:

    I'm not advocating tail-recursion instead of specialized iteration mechanisms closer to the problem domain. I'm just saying tail-
    recursion code isn't anywhere as low-level as you're making it up to
    be.

    It actually is, and your posting below shows it very nicely.

    Here is a nice example using loop:

    (loop for (key value) on property-list by #'cddr
    unless (member key excluded-keys)
    append (list key value)) ; [1]

    As a function:

    (defun filter (excluded-keys property-list)
    (loop for (key value) on property-list by #'cddr
    unless (member key excluded-keys)
    nconc (list key value)))

    (filter '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
    (A 1 B 2 B 3)

    The result is a correct property list

    Gauche Scheme

    (define (remove-props bad-keys prop-list)
    (concatenate
    (remove (^p (member (car p) bad-keys))
    (slices prop-list 2))))

    (remove-props '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
    ===>
    (a 1 b 2 b 3)

    Using "is":

    (define (remove-props bad-keys prop-list)
    (concatenate
    (remove (is car member bad-keys)
    (slices prop-list 2))))


    Given:

    (define is
    (case-lambda
    [(x) (lambda(y) (equal? y x))]
    [(pred x) (lambda(y) (pred y x))]
    [(key pred x) (lambda(y) (pred (key y) x))]))
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp,comp.lang.scheme on Sun Jun 22 21:42:20 2025
    From Newsgroup: comp.lang.lisp

    B. Pym wrote:

    Pascal Costanza wrote:

    I'm not advocating tail-recursion instead of specialized iteration mechanisms closer to the problem domain. I'm just saying tail-
    recursion code isn't anywhere as low-level as you're making it up to
    be.

    It actually is, and your posting below shows it very nicely.

    Here is a nice example using loop:

    (loop for (key value) on property-list by #'cddr
    unless (member key excluded-keys)
    append (list key value)) ; [1]

    As a function:

    (defun filter (excluded-keys property-list)
    (loop for (key value) on property-list by #'cddr
    unless (member key excluded-keys)
    nconc (list key value)))

    (filter '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
    (A 1 B 2 B 3)

    The result is a correct property list

    Gauche Scheme

    (define (remove-props bad-keys prop-list)
    (concatenate
    (remove (^p (member (car p) bad-keys))
    (slices prop-list 2))))

    (remove-props '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
    ===>
    (a 1 b 2 b 3)


    Gauche Scheme

    (delete-keywords '(c d) '(a 1 b 2 b 3 c 4 d 5 c 6))
    ===>
    (a 1 b 2 b 3)
    --- Synchronet 3.21d-Linux NewsLink 1.2