[ << Scheme tutorial ] | [Top][Contents][Index] | [ Interfaces for programmers >> ] |
[ < Hash tables ] | [ Up : Introduction to Scheme ] | [ Scheme procedures > ] |
1.1.5 Calculations in Scheme
Scheme can be used to do calculations. It uses prefix
syntax. Adding 1 and 2 is written as (+ 1 2)
rather than the
traditional 1+2.
guile> (+ 1 2) 3 |
Calculations may be nested; the result of a function may be used for another calculation.
guile> (+ 1 (* 3 4)) 13 |
These calculations are examples of evaluations; an expression like
(* 3 4)
is replaced by its value 12
.
Scheme calculations are sensitive to the differences between integers and non-integers. Integer calculations are exact, while non-integers are calculated to the appropriate limits of precision:
guile> (/ 7 3) 7/3 guile> (/ 7.0 3.0) 2.33333333333333 |
When the scheme interpreter encounters an expression that is a list, the first element of the list is treated as a procedure to be evaluated with the arguments of the remainder of the list. Therefore, all operators in Scheme are prefix operators.
If the first element of a Scheme expression that is a list passed to the interpreter is not an operator or procedure, an error will occur:
guile> (1 2 3) Backtrace: In current input: 52: 0* [1 2 3] <unnamed port>:52:1: In expression (1 2 3): <unnamed port>:52:1: Wrong type to apply: 1 ABORT: (misc-error) guile> |
Here you can see that the interpreter was trying to treat 1 as an operator or procedure, and it couldn’t. Hence the error is "Wrong type to apply: 1".
Therefore, to create a list we need to use the list operator, or to quote the list so that the interpreter will not try to evaluate it.
guile> (list 1 2 3) (1 2 3) guile> '(1 2 3) (1 2 3) guile> |
This is an error that can appear as you are working with Scheme in LilyPond.
[ << Scheme tutorial ] | [Top][Contents][Index] | [ Interfaces for programmers >> ] |
[ < Hash tables ] | [ Up : Introduction to Scheme ] | [ Scheme procedures > ] |