• Re: shootout: implementing an interpreter

    From B. Pym@21:1/5 to Kent M. Pitman on Wed Aug 7 17:28:34 2024
    Kent M. Pitman wrote:

    (defun shrug (list)
    (loop for (x . sublist-and-more) on list
    for more = (member x sublist-and-more)
    when more
    collect `(g ,x ,(ldiff sublist-and-more more))))
    SHRUG

    (shrug '(a b c a d b d))
    ((G A (B C)) (G B (C A D)) (G D (B)))


    newLISP

    (define (shrug xs (x (pop xs)))
    (and xs
    (if (match (list '* x '*) xs)
    (cons (list 'g x ($it 0)) (shrug xs))
    (shrug xs))))

    (shrug '(a b c a d b d))

    ((g a (b c)) (g b (c a d)) (g d (b)))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to B. Pym on Thu Aug 8 17:36:32 2024
    B. Pym wrote:

    Kent M. Pitman wrote:

    (defun shrug (list)
    (loop for (x . sublist-and-more) on list
    for more = (member x sublist-and-more)
    when more
    collect `(g ,x ,(ldiff sublist-and-more more))))
    SHRUG

    (shrug '(a b c a d b d))
    ((G A (B C)) (G B (C A D)) (G D (B)))


    newLISP

    (define (shrug xs (x (pop xs)))
    (and xs
    (if (match (list '* x '*) xs)
    (cons (list 'g x ($it 0)) (shrug xs))
    (shrug xs))))

    (shrug '(a b c a d b d))

    ((g a (b c)) (g b (c a d)) (g d (b)))

    Shorter:

    (define (shrug xs (x (pop xs)))
    (and xs
    (if (find x xs)
    (cons (list 'g x (0 $it xs)) (shrug xs))
    (shrug xs))))
    -

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to Frank Buss on Sun Sep 8 05:09:49 2024
    XPost: comp.lang.scheme

    Frank Buss wrote:

    Looks like the Haskell syntax is not good enough, because there is Template Haskell and doesn't look like it is invented by people who don't know how
    to write it with higher order functions, because there are functions in the Haskell List package like this:

    -- | The 'zip4' function takes four lists and returns a list of
    -- quadruples, analogous to 'zip'.
    zip4 :: [a] -> [b] -> [c] -> [d] -> [(a,b,c,d)]
    zip4 = zipWith4 (,,,)

    Scheme

    (map list '[2 3 4] '[20 30 40] '[200 300 400] '[2000 3000 4000])
    ===>
    ((2 20 200 2000) (3 30 300 3000) (4 40 400 4000))

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