Hi,
I'm new with Scheme and new with org babel so excuse me if I am missing something obvious.
I have this bit of (simplified) Scheme code to generate a list of lists:
#+name: chromatic
#+begin_src scheme :noweb yes
(map (lambda (x)
(cond ((< x 4) (list 0 1))
((equal? x 4) (list 2 0))
((> x 4) (list 1 1))))
(list 0 1 2 3 4 5 6 7 8 9 10 11))
#+end_src
It appears to be working fine outputting a table such as
#+RESULTS:
| 0 | 1 |
| 0 | 1 |
| 0 | 1 |
...
For another function in Lilypond, also in scheme I need it to be a (list (list 0 1) (list 0 1)...) as in the variable seq below:
#+begin_src scheme :noweb yes
$(let ((random-state (seed->random-state (current-time)))
(seq (list (list 0 0) (list 0 1/2) (list 1 0) (list 1 1/2) (list 2 0) (list 3 0) (list 3 1/2) (list 4 0) (list 4 1/2) (list 5 0) (list 5 1/2) (list 6 0))))
(make-sequential-music
(map (lambda (x p)
(let ((idx (random 12 random-state)))
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch 0 (car p) (car (cdr p))))))
(make-list (length seq)) seq)))
#+end_src
I can do:
(seq <<alist>>)
if alist is:
#+name: alist
#+begin_src scheme
(list (list 0 0) (list 0 1/2) (list 1 0) (list 1 1/2) (list 2 0) (list 3 0) (list 3 1/2) (list 4 0) (list 4 1/2) (list 5 0) (list 5 1/2) (list 6 0))
#+end_src
but what I would like to be able to do is to have have the noweb reference be to the 'chromatic' function above as in:
(seq <<chromatic()>>)
but that doesn't work. Maybe what I am trying to do is not possible, maybe there is a limitation on ob-lilypond, but it seems to me that the result of my function chromatic above spits out ((0 1) (0 1)... ) and that this is the cause it doesn't work.
Again, I am really new to this...
The workaround I am doing is to format the output of chromatic into a proper list och lists and then add it by noweb reference.
Any hints welcome.
/Henrik