lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Validating a Scheme list


From: Malte Meyn
Subject: Re: Validating a Scheme list
Date: Thu, 15 May 2014 10:45:18 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

Hi,

I almost don’t know any Scheme but I think this could be done with a map, a fold, and some function composition. In Haskell, you would do this:

validate      = foldr (&&) True . map ((== 2) . length)
validateShort = and             . map ((== 2) . length)

The function and is a shortcut defined in Haskell’s Prelude. I don’t know how, but something similar must be possible in Scheme ;)

Malte


On 15.05.2014 10:09, Urs Liska wrote:
Hi all,

I am working on a Scheme function and would like to check if I have
found the best solution for a specific subpart. Somehow it looks more
complicated than necessary.

The function needs to test if each element of a given list is a
(sub)list with exactly two elements. So

'((1 2)(3 4))

would return #t while

'((5 6)(7 8 9))

would return #f.

My solution is

\version "2.19.6"

validate =

#(define-scheme-function (parser location lst) (list?)

    (if (memv #f (map (lambda sig

                        (and (list? (car sig))

                             (= 2 (length (car sig))))) lst))

        (display "invalid")

        (display "valid"))

    (newline))

{

   \validate #'((1 2)(3 4))

   \validate #'((5 6)(7 8 9))

}

The "framework" doesn't matter, it's just a compilable example. My
question is only about the "if" expression.

What it does is:
- go through the elements of lst
- produce a list of boolean values,
   - #t if we have a two element list,
   - #f if not
- check if this intermediate list contains at least one #f

Somehow this looks clumsy to me, and I'd like to know (and learn) if
there's a better solution for this.

TIA
Urs




_______________________________________________
lilypond-user mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/lilypond-user




reply via email to

[Prev in Thread] Current Thread [Next in Thread]