[CM] Grace: Scheme and SAL differences
Uğur Güney
ugurguney at gmail.com
Mon Oct 26 07:29:53 PDT 2009
# Thank you very much! Now I understand the loop macro. I forgot "do"
keywords.
# And now I have another problem about sprouting process'.
# This is the SAL example of a process:
define process simple()
run repeat 20
send "mp:midi", key: between(60, 96)
wait .1
end
sprout simple()
# Every time I evaluate sprout line, grace plays midi notes.
# And here is my Scheme version:
(define simple2
(process repeat 20 do
(send "mp:midi" :key (between 60 96))
(wait 0.1)))
(sprout simple2)
# The evaluation (by CTRL+Enter) of sprout line plays only for once. After
that I have to evaluate the process definition again, to play it again.
# I suspect that second evaluation does not create a new process but tries
to use the old one. But I am not sure. Or I am making mistakes again :-)
# Regards,
v.u.g
2009/10/25 Heinrich Taube <taube at uiuc.edu>
>
> On Oct 23, 2009, at 2:49 AM, Uğur Güney wrote:
>
> # Dear list and Mr. Taube
>> # I want to use Grace with Scheme rather than SAL. I am using version
>> 3.3.0 svn:1769. I looked at the "SAL tutorials" and tried to convert them to
>> Scheme code. But I think some SAL commands does not exist in Scheme version.
>> Like:
>>
>> print "Hello, world!" -> (print "Hello, world!")
>> # gives "print: unbound variable" error. I can just evaluate
>> "Hello, world!"
>> # or try
>> (display "Hello, world!")
>> # But the output of (display) is yellow, not green and does not have "\n"
>> character at the end.
>>
>
> you can use s7's 'format' function. that function will both print the
> message to the terminal and return the string it printed:
>
>
> cm> (format #t "hello world~%")
> hello world
> "hello world
>
> "
>
>
> print "my key number: ", between(60, 90) -> (display "my key number: "
>> (between 60 90))
>> # gives "display argument 2, 66, is an integer, but should be an output
>> port" error. I have to write
>> (string-append "my key number: " (number->string (between 60 90)))
>>
>
> (format #t "my key number: ~S~%" (between 60 90))
>
>
>
> # Another component I could not find (which is, I think, more important)
>> is the loop macro.
>> loop repeat 5
>> print "a random keynum: ", random(128)
>> end
>> --->
>> (loop re peat 5
>> (random 128))
>> # gives: >>> Error: Found 're peat' where operator expected.
>> clause context: 're peat 5 (random 128)'
>>
>
> (loop repeat 5 do (format #t "a random keynum: ~S~%" (random 128))
>
>
>
> # and
>>
>> loop for c in {a b c d e f g }
>> print c
>> end
>> --->
>> (loop for c in '(a b c d e f g)
>> (display c))
>> # gives: >>> Error: Expression expected but source code ran out.
>>
>>
> (loop for c in '(a b c d e f g) do (format #t "~S~%" c))
>
> or better
>
> (loop for c in '(a b c d e f g) collect c)
>
>
>
> # Similarly,
>> loop for x from 1 to 10
>> print "x=", x
>> end
>> ---->
>> (loop for x from 1 to 10
>> x)
>> # gives the same error.
>>
>>
> (loop for i from 1 to 10 collect i)
>
>
> # Of course a recursive approach using car's and cdr's works.
>> (define (play-chord chd)
>> (if (not (equal? chd '()))
>> (begin (send "mp:midi" :key (car chd))
>> (play-chord (cdr chd)))))
>> (play-chord '(50 55 60))
>>
>
> (define (play-chord chd)
> (loop for x in chd do (send "mp:midi" :key x)))
>
>
> (play-chord '(50 55 60))
>
>
> # But I think that the loop macro is not implemented in Grace. Am I
>> correct or making a mistake?
>>
>
> you're making mistakes (plural) ;)
>
> read the common lisp documentation on loop, most of it is supported.
>
>
>
>
>
>
>
>
>
> # Best regards,
>> -ugur guney-
>> _______________________________________________
>> Cmdist mailing list
>> Cmdist at ccrma.stanford.edu
>> http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cm-mail.stanford.edu/pipermail/cmdist/attachments/20091026/e72d66a1/attachment.html>
More information about the Cmdist
mailing list