JulioHerrlein Posted January 16, 2019 Share Posted January 16, 2019 Dear All, I'm trying to find a loop for making substitutions in a list, for changing the ranges of a list of pitches. SOME PITCHES (AND WHAT TO CHANGE) (setf pitches '(c4 d4 e4 c4 eb4 f4 c4 eb4 eb5)) (setf i '(c4 eb4)) This will take out the range of the notes, i.e., c4 db5 will became c db (defun convert-pitch (pitches) (loop for i in pitches when (pitchp i) collect (compress (butlast (explode i))) else collect i)) Setting a variable for pitches without range indication (pitnorng) and a new range list (setf pitnorng (convert-pitch pitches)) (setf rangelist '(4 5 3 6 4)) Function to put back the new range to the notes (defun convert-pitchbk (pitnorng) (loop for i in pitnorng when i collect (flatten (mapcar 'list pitnorng rangelist)) else collect i )) Setting a collection of notes with new ranges: (setf convbaklst (convert-pitchbk pitnorng)) The (problematic) result: ((c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4) (c 4 d 5 e 3 c 6 eb 4)) I have WHITE SPACES between the note and the corresponding range... LISP PROBLEM: How to remove the white spaces ? Best, Julio And also... The list is multiplied 9 times... why? Some problem in the loop function, I suppose... Quote Link to comment Share on other sites More sharing options...
AM Posted January 16, 2019 Share Posted January 16, 2019 (loop for i in (gen-divide 2 '(c 4 d 5 e 3 c 6 eb 4)) collect (compress i)) => (c4 d5 e3 c6 eb4) i didn't read you posts precisely. only the last ONE ...but you could use COMPRESS...? JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted January 16, 2019 Author Share Posted January 16, 2019 Thanks a lot, André ! I´m trying to use your famous loops ! All the Best ! Happy 2019 ! Julio Quote Link to comment Share on other sites More sharing options...
opmo Posted January 16, 2019 Share Posted January 16, 2019 I will make the octave-map function work with octaves numbers as well. (octave-map '(c3 cs3 e5 f5 fs6 g5 gs4 a4 as3 b3) '(c3 d3 e3 f3 g4 f4 e4 d4 c4 cs4)) => (c3 d3 e5 f5 g6 f5 e4 d4 c3 cs3) (octave-map '(3 3 5 5 6 5 4 4 3 3) '(c3 d3 e3 f3 g4 f4 e4 d4 c4 cs4)) => (c3 d3 e5 f5 g6 f5 e4 d4 c3 cs3) JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
AM Posted January 16, 2019 Share Posted January 16, 2019 1 hour ago, JulioHerrlein said: Thanks a lot, André ! I´m trying to use your famous loops ! All the Best ! Happy 2019 ! Julio i know, LOOPS are not very LISPian! but for me the most simple way "to think such processes" (more intuitive then recursion/iteration). and when the function/code is not to large it's not that important... JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted January 16, 2019 Author Share Posted January 16, 2019 21 minutes ago, opmo said: I will make the octave-map function work with octaves numbers as well. (octave-map '(3 3 7 5 6 6 7 7 7 3) '(c3 d3 e3 f3 g4 f4 e4 d4 c4 cs4)) => (c3 d3 e7 f5 g6 f6 e7 d7 c7 cs3) Thank you Janusz ! Good Idea ! Happy 2019 ! Best, Julio Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted January 16, 2019 Author Share Posted January 16, 2019 Janusz, It would be great with some kind of span inside, like this: (octave-map '(3 5 6) '(c3 d3 e3 f3 g3 f3 e3 d3 c3 cs3)) => (c3 d5 e6 f3 g5 f6 e3 d5 c6 cs3) Best, Julio Or better: (octave-map '(3 5 6) '(c3 d3 e3 f3 g3 f3 e3 d3 c3 cs3) :span t) => (c3 d5 e6 f3 g5 f6 e3 d5 c6 cs3) Best, Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted January 16, 2019 Share Posted January 16, 2019 1 hour ago, AM said: i know, LOOPS are not very LISPian! but for me the most simple way "to think such processes" (more intuitive then recursion/iteration). and when the function/code is not to large it's not that important... Personally, i like very much to use the loop macro facilities, much clear and easy for me than recursion. Also, I am a big fan of it because it is very powerful. SB. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
opmo Posted January 17, 2019 Share Posted January 17, 2019 This is how all functions work - with span or trim build in. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted January 17, 2019 Author Share Posted January 17, 2019 45 minutes ago, opmo said: This is how all functions work - with span or trim build in. Beautiful Quote Link to comment Share on other sites More sharing options...
opmo Posted January 20, 2019 Share Posted January 20, 2019 Done in version 1.3.24409. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted January 20, 2019 Author Share Posted January 20, 2019 Great, Janusz. And no more manual updates !! Best, Julio Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.