On 2020-12-11 10:43 am, Matthew Fong wrote:
Hello everyone,

Resurrecting an old thread. I've been trying my hand in Scheme programming,
via small examples on the project I'm working on.

I wanted to extend the variable list to this function Harm wrote, to take an extra boolean variable, which is pretty trivial. The boolean is meant to change the color of the text depending if it's true or false. But I am not clear on how to define the color using the boolean. The trivial way to do it is adding a conditional under the first if, and duplicate all the code
except the color. Is there a proper Scheme-ish way to do this?
(Admittingly, I have not caught on to Scheme just yet -- my brain tends to
work with Python)

print-if-defined =
#(define-void-function (sym text) (symbol? markup?)
  (if (defined? sym)
      (add-text #{ \markup \with-color #'(0.8 0.2 0.2) #text #})))

symA = "Something"

\print-if-defined #'symB "Text"
\print-if-defined #'symA "Text"

Unless I am missing something from your specific use case, you should only need to nest another (if ...) expression in place of the actual color:

%%%%
print-if-defined =
#(define-void-function (foo sym text) ((boolean? #f) symbol? markup?)
  (if (defined? sym)
      (add-text #{ \markup \with-color
        #(if foo '(0.8 0.2 0.2) '(0.2 0.8 0.2))
        #text #})))

symA = "Something"

\print-if-defined #'symB "Text"     % hidden
\print-if-defined #'symA "Text"     % shown, green
\print-if-defined ##t #'symA "Text" % shown, red
%%%%


-- Aaron Hill

Reply via email to