Thomas Morley-2 wrote > Hi Paul, > in general I disagree. > Nearly every time I thought I'd need a predicate for multiple > argument-types, I found a way to code it better/simpler.
Hi Harm, Maybe you're right that better/simpler code uses single-type arguments. I'm not convinced but I'll defer to those with more experience. In any case, 10 of the 26 LilyPond scheme predicates[1] are "x-or-y?" combinations, which suggests that they are useful. Defining each combination one by one like this seems like a kind of hard coding to me. Wouldn't it be better to have a general way to combine types as needed for any given case? As you say below there are already some workarounds available to users. [1] http://lilypond.org/doc/v2.18/Documentation/notation/predefined-type-predicates#lilypond-scheme-predicates Thomas Morley-2 wrote > OTOH, we have already the most general `scheme?'-predicate. You can > use it first and sort the argument-types later. > > And really hackish is: > > test = > #(define-music-function (parser location test-arg mus) > ( > ;very bad, kludgy and hacky, though valid: > ((lambda (x) (or (boolean? x) (number? x) (procedure? x))) "") > ;scheme? > ly:music? > ) > > (cond ((boolean? test-arg) > (format #t "\n~a is a boolean." test-arg)) > ((number? test-arg) > (format #t "\n~a is a number." test-arg)) > ((procedure? test-arg) > (format #t "\n~a is a procedure." test-arg)) > (else #f)) > mus) > > m = { c''1 } > > \test ##f \m > \test #3 \m > \test #(lambda (a) a) \m Good point about "scheme?", although it is so general that it doesn't tell you which combination of types are expected, while this does: ((lambda (x) (or (boolean? x) (number? x) (procedure? x))) "") I'm not sure I understand why this is so bad. It seems better than "scheme?" here since it is more specific. I had tried to do this before but I didn't know I needed to include the "" at the end. (I assume this "" is the description and could be changed to "boolean, number, or procedure" so error messages would be accurate.) What if a list of type predicates was a valid type predicate? '(boolean? number? procedure?) Their individual descriptions could be combined for error messages. At the end of the day this is a small and incremental thing and I don't want to belabor it. Cheers, -Paul -- View this message in context: http://lilypond.1069038.n5.nabble.com/Re-Issue-3918-Add-alternatingTimeSignatures-issue-97110045-tp162462p163041.html Sent from the Dev mailing list archive at Nabble.com. _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel