|
View:
New views
7 Messages
—
Rating Filter:
Alert me
|
|
|
Grace: Scheme and SAL differences# 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. 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))) # 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 repeat 5 (random 128)) # gives: >>> Error: Found 'repeat' where operator expected. clause context: 'repeat 5 (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. # Similarly, loop for x from 1 to 10 print "x=", x end ---->
(loop for x from 1 to 10 x) # gives the same error. # 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)) # But I think that the loop macro is not implemented in Grace. Am I correct or making a mistake?
# Best regards, -ugur guney- _______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
|
|
Re: Grace: Scheme and SAL differencesOn 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 repeat 5 > (random 128)) > # gives: >>> Error: Found 'repeat' where operator expected. > clause context: 'repeat 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@... > http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist _______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
|
|
Re: Grace: Scheme and SAL differences# 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@...>
_______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
|
|
Re: Grace: Scheme and SAL differences# Hi!
# After so much questions I asked, I wanted to share what I have learned. I translated the first 4 SAL tutorials to Scheme and attached them. # When a comment needs to be changed I erased it and put a "...". I did not to try change them :-)
# I you think that this maybe helpful I can complete the translation of the tutorials. # Have a nice day! v.u.g
2009/10/26 Uğur Güney <ugurguney@...> # Thank you very much! Now I understand the loop macro. I forgot "do" keywords. _______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
|
|
Re: Grace: Scheme and SAL differencesI just wanted to throw out a quick "Thank you" for this work. I've
been a Scheme programmer for a long time now, and I really wanted to stay in Scheme while working with CM and was feeling frustrated by the need to translate. AFAICT there is a definite lack of tutorials published on the web for CM (perhaps they have expired?). Thanks again. 2009/10/27 Uğur Güney <ugurguney@...>: > # Hi! > # After so much questions I asked, I wanted to share what I have learned. I > translated the first 4 SAL tutorials to Scheme and attached them. > # When a comment needs to be changed I erased it and put a "...". I did not > to try change them :-) > # I you think that this maybe helpful I can complete the translation of the > tutorials. > # Have a nice day! > v.u.g > > 2009/10/26 Uğur Güney <ugurguney@...> >> >> # 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@...> >>> >>> 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@... >>>> http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist >>> >> > > > _______________________________________________ > Cmdist mailing list > Cmdist@... > http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist > > -- GPG Public key at http://cyber-rush.org/drr/gpg-public-key.txt _______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
|
|
Re: Grace: Scheme and SAL differencesUgur,
It would be very helpful for me if you would translate the tutorials into Scheme -- please do this, I would greatly appreciate it. I'm using a few different applications that are all Scheme-based and it would be really nice to include Grace in that group and be able to just have my students stay in one standard programming environment (Scheme). That way, they only have to learn one language (which is also happily of very broad applicability.) Tim 2009/10/27 Uğur Güney <ugurguney@...> # Hi! -- Dr. Timothy Ernest Johnson _______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
|
|
Re: Grace: Scheme and SAL differencesif anyone translates .sal examples to scheme ill certainly include it
in the distro and menu. i dont teach beginning algocomp in scheme so i just have the .sal > # 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, yes its is wrong in the sense that you are trying to "reuse" someting that is already finished. never save and reuse (process...) descriptions. instead define FUNCTIONS that return them: (define (simple2 ) (process repeat 20 do (send "mp:midi" :key (between 60 96)) (wait 0.1)))) (sprout (simple2 )) On Oct 27, 2009, at 9:00 AM, Timothy Johnson wrote: > Ugur, > > It would be very helpful for me if you would translate the tutorials > into Scheme -- please do this, I would greatly appreciate it. I'm > using a few different applications that are all Scheme-based and it > would be really nice to include Grace in that group and be able to > just have my students stay in one standard programming environment > (Scheme). That way, they only have to learn one language (which is > also happily of very broad applicability.) > > Tim > > 2009/10/27 Uğur Güney <ugurguney@...> > # Hi! > # After so much questions I asked, I wanted to share what I have > learned. I translated the first 4 SAL tutorials to Scheme and > attached them. > # When a comment needs to be changed I erased it and put a "...". I > did not to try change them :-) > # I you think that this maybe helpful I can complete the translation > of the tutorials. > # Have a nice day! > v.u.g > > 2009/10/26 Uğur Güney <ugurguney@...> > > # 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@...> > > > 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@... > http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist > > > > > _______________________________________________ > Cmdist mailing list > Cmdist@... > http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist > > > > > -- > Dr. Timothy Ernest Johnson > _______________________________________________ > Cmdist mailing list > Cmdist@... > http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist _______________________________________________ Cmdist mailing list Cmdist@... http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist |
| Free embeddable forum powered by Nabble | Forum Help |