Jump to content

Removing white spaces from a list ?


Recommended Posts

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...

Link to comment
Share on other sites

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)

 

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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, 

 

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy