[Haskell-beginners] Re: Iterating through a list of char...

matthew coolbeth mac01021 at engr.uconn.edu
Thu Apr 29 16:31:14 EDT 2010


This works, except for the case where '=' appears more than twice
consecutively.  A string of multiple '=' should be treated as a single '='.

On Thu, Apr 29, 2010 at 16:26, Ozgur Akgun <ozgurakgun at gmail.com> wrote:

> I won't attempt writing a general-case function now. If I understood your
> (rather long) description correctly, you want to
> - subtract 42 from the ascii value of the char, except when it is preceeded
> by '=', in which case you subtract 106 instead.
>
> foo :: [Char] -> [Char]
> foo ('=':x:xs) = chr (ord x - 106) : foo xs
> foo (x:xs)     = chr (ord x - 42)  : foo xs
> foo _          = []
>
> Hope I understood the problem correctly.
> Best,
>
> On 29 April 2010 20:37, Jean-Nicolas Jolivet <jeannicolascocoa at gmail.com>wrote:
>
>> First I would like to thank everyone for the very interesting replies and
>> suggestions I got so far!...
>>
>> I tried to implement (and at the very least understand) most of them!...
>>
>> To add to the context here, what I am trying to do is:
>>
>> -apply a "transformation" to a character (in my case, subtracting 42 to
>> its ASCII value, which I obtain with chr(ord(c) - 42)
>> -if the character is preceded by a specific character (that would be, an
>> escape character, in this case '=') then subtract 106 to its value instead
>> of 42...
>> -if the character is the escape character itself, '=',  then skip it
>> altogether (keeping in mind that the next character needs to be escaped)...
>>
>> I managed to do it, however I'm not totally satisfied in the way I did
>> it... the problem was that... as I just explained, in some cases, the
>> character that is being processed has to be "skipped" (and by that I mean,
>> not added to the resulting string). This happens when the processed
>> character IS the escape character...
>>
>> What I did was to build a List of Maybe Char.... my function does the
>> proper operation on the character and returns a "Just Char" when the
>> character is processed, or Nothing when it is the escaped character... so
>> basically I would end up with something like:  [Just 'f', Just 'o', Just
>> 'o', Nothing]... I am mapping this using mapMaybe to end up with a proper
>> String...
>>
>> Would there be any more efficient way of doing this? Considering that the
>> escape character should NOT be added to the resulting string, is there any
>> way I can avoid using the Maybe monad?
>>
>> Once again, thanks everyone for all the suggestions!
>>
>> Jean-Nicolas Jolivet
>>
>> On 2010-04-28, at 10:56 AM, Jean-Nicolas Jolivet wrote:
>>
>> > Hi there!
>> >
>> > I'm trying to iterate through each character of a string (that part I
>> > can do!) however, I need to apply a transformation to each
>> > character...based on the previous character in the string! This is the
>> > part I have no clue how to do!
>> >
>> > I'm totally new to Haskell so I'm pretty sure I'm missing something
>> > obvious... I tried with list comprehensions...map... etc... but I
>> > can't figure out how I can access the previous character in my string
>> > in each "iteration".... to use simple pseudo code, what i need to do
>> > is:
>> >
>> > while i < my_string length:
>> >       if my_string[i-1] == some_char:
>> >               do something with my_string[i]
>> >       else
>> >               do something else with my_string[i]
>> >
>> > I'm using imperative programming here obviously since it's what I am
>> > familiar with...but any help as to how I could "translate" this to
>> > functional programming would be really appreciated!
>> >
>> >
>> > Jean-Nicolas Jolivet
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://www.haskell.org/mailman/listinfo/beginners
>>
>
>
>
> --
> Ozgur Akgun
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>


-- 
mac
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20100429/245c97c0/attachment.html


More information about the Beginners mailing list