Thomas Morley <thomasmorle...@gmail.com> writes: > Hi all, > > (1) > consider the following code (working as expected): > > \paper { > #(if #t (set-paper-size "a8" 'landscape) #(set-paper-size "a8")) > } > > \score { { R1 } \layout { ragged-right = ##f } } > > Switching from #t to #f results in different paper-size, as desired.
Unlikely as you write #(set-paper-size ...) here, see below. > > (2) > But trying to put it in a procedure, it always returns the true-case: > > #(define (proc bool x y) > (if bool x y)) > > \paper { > #(proc #f (set-paper-size "a8" 'landscape) #(set-paper-size "a8")) > } Uh, the return value is irrelevant. It always _executes_ the true case. It also executes the false case but that is not overly interesting since the false case is a vector consisting of the elements 'set-paper-size and "a8" since you write #(...) while already in Scheme, the syntax for vector literals. Now if you want to execute only conditionally, you either need to wrap in lambdas or use a macro rather than a procedure: #(define-macro (proc bool x y) (if bool x y)) \paper { #(if #t (set-paper-size "a8" 'landscape) (set-paper-size "a8")) } Note that this will only work with a _literal_ #f or #t as argument: you'll likely want to have some actual condition evaluated at runtime, like some variable name. Then you'll need to write #(define-macro (proc bool x y) `(if ,bool ,x ,y)) -- David Kastrup _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user