Am 27.06.2018 um 07:34 schrieb Freeman Gilmore:


        Thanks Urs:

        That worked.   Problem was that I did not know that the
        results would be displayed in the log window.   The
        tutorial I am using had some example like  (+ 1 2 3) =>  and
        I was expecting 6 in the same window on the next line when I
        compiled.

        This is what one refers to as a REPL (read-eval-print-loop),
        which is what LilyPond's Scheme sandbox does.

        This may be what you mean by " but no immediate expression
        evaluation".

        Yes. Frescobaldi deals with LilyPond *files*, not an
        immediate expression evaluation.

        Is => valid in guile?

        No.

         How would I display the results of (+ 1 2 3), at this point
        of the tutorial it just says  "(+ 1 2 3)  => 6"?

        When a tutorial writes "=>" it means: "You type in '(+ 1 2
        3)', and the REPL will display '6'. So "=>" isn't a
        syntactical construct but a typographical convention for "the
        expression to the left evaluates to the datum on the right".

        Tutorials usually want you to learn from this immediate
        evaluation, and in Frescobaldi you have to always do that
        extra step to display something. But in general it's worth
        the effort, and I do that 90% of the time when I want to try
        something out or learn more about Scheme.

        ​​
        For displaying values you can use #(display) or #(ly:message
        "Some value: ~a" data) (to start with ...)

        HTH
        Urs


        Thank you,
        ƒg​

    ​Urs:

    In you first example #(let...) what function does 'let'
    preform?    From your examples in "​For displaying values you can
    use #(display) or #(ly:message "Some value: ~a" data) (to start
    with ...)", could you please give me examples of each?   I need
    this to study the tutorial using Frescobaldi.

    OK, it probably wasn't such a good idea to use non-atomic examples.
    Let me try to put it another way: what you have in Frescobaldi is
    a LilyPond file. This file may include Scheme code, and LilyPond
    even works if there is *only* Scheme code in the file and no score
    is even generated. That way you can use LilyPond and Frescobaldi
    as a tool to experiment with Scheme code.

​When I started this post​ I was hoping that Scheme work with out score.


    The way to include Scheme in LilyPond is the '#'. Whenever
    LilyPond encounters this hash it will have the immediately
    following expression evaluated by Scheme. Essentially the
    expression is replaced by the resulting value.

​This helped​
​a lot.​


    What you have already noticed is that this Scheme code is not
    evaluated immediately (as is done on a REPL and what your tutorial
    seems to assume), but only when compiling the LilyPond file.

    One more thing to understand is the following: any Scheme
    expression *evaluates to* something (like (+ 1 2 3) evaluates to
    6). In a REPL this value is displayed but in LilyPond/Frescobaldi
    it is not. If you write #(+ 1 2 3) in a LilyPond file it *will*
    evaluate to 6 but it only has the effect of placing that value 6
    in the LilyPond file, which will have no effect at all.

​I figured this​.


    The additional effort you have to make is explicitly print any
    value you want to inspect to the log window. Scheme provides some
    functions for that purpose: display, print, pretty-print, and more.
    ​​
      #(define my-var 12)
      #(display my-var)
    will print '12' to the log window,
      #(display (+ 1 2 3))
    will print '6'

​Now this helped because I was making it work with #(let...; above is much simpler.


    Note that display won't add a line break, so when you want to see
    more than one value you'll want to add #(newline) expressions in
    between.

​Read that sum place.​


    A final remark: there are many Scheme implementations (or
    dialects) around, with more or less subtle differences. When you
    use LilyPond you have a very specific dialect available (the Guile
    implementation in its version 1.8), plus when starting up LilyPond
    a number of extra Guile modules and many LilyPond features are
    automatically added. This means that when you follow a "Scheme
    tutorial" not necessarily everything will match what you find in
    LilyPond.

    [And please allow me a plug: you may find rewarding to have a look
    at https://scheme-book.ursliska.de
    <https://scheme-book.ursliska.de>, which is far from complete but
    aims at giving a slow-paced and detailed introduction specifically
    from a LilyPond perspective]

​This is what I have been looking for.   Is there a PDF?    ​

No, and currently my (Gitbook) build system is broken, so I can't even upload updates. But the content is available in a bunch of Markdown files, and I'd be ready to move on to a new system, possibly Pandoc-based. If someone has a good suggestion for a tool/set-up to create PDF documents and HTML sites from Markdown content (with LilyPond syntax highlighting and inclusion of LilyPond scores) I'd be glad to look into it.

​Check your ​URL in this:
Last part of https://scheme-book.ursliska.de/scheme/expressions.html
"You can and should for now ignore everything you don't know about that (we'll soon cover it in the chapter about variable binding <https://scheme-book.ursliska.de/scheme/binding.html>) but simply realize that within that “mess” we have inserted ..."

Well, like with Wiki systems you can enter links to pages that don't exist yet. So that's simply part of the incompleteness of the "book", and I can't do anything about it right now.

Best
Urs


​Thank you, ƒg
​
Best
Urs


​Thank you,
ƒg​

    ​​




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

Reply via email to