Am 07.11.2016 um 09:57 schrieb Richard Shann: > On Mon, 2016-11-07 at 06:45 +0100, Urs Liska wrote: >> Am 7. November 2016 01:20:23 MEZ, schrieb Andrew Bernard >> <andrew.bern...@gmail.com>: >>> Hi Simon, >>> >>> Thanks! Exactly perfect. Sometimes the completely obvious escapes me. >>> Better >>> have another coffee. >>> >>> Most appreciated. >>> >>> I suppose of course that to make it a predicate without the preliminary >>> let >>> block (not that I have any objection to that) one would have to modify >>> lilypond internals, which would not be desirable. >> Not at all! >> >> Just define your predicate with >> >> #(define (side? obj) >> (if (or (eq? obj 'left) >> (eq? obj 'right)) >> #t #f)) > more succinctly > > #(define (side? obj) > (or (eq? obj 'left) > (eq? obj 'right)))
No. This will return either 'left or 'right if successful. But a predicate is to return #t or #f. Urs > >> and use it like any other procedure. The ? at the end is just a convention, >> predicates are nothing else >> than procedures taking one argument and returning #t or #f. > #t or any other value that is not #f - the value #t is rather rarely > used in conventional Scheme code; great use is made of the convenience > that all expressions are true except #f which is false. > > Richard > > > > > > _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user