<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><br>Hi Raphael,<br><br>   I am almost there. It compiles well but am not getting the correct results. The results i get now is only one tuple in the list:  <span style="font-weight: bold;"> [{3, 1}]</span><br><br><br>Here is the problem.<br><br>I have made changes to  the following functions:<br><br><span style="font-weight: bold;">I don't understand what u mean by updating Freqs with recursion. i think concatenating </span><span style="font-style: italic;">[{J,N}]</span><span style="font-weight: bold;">  to it is the update since  OR?. Since it handle one list item at a time as you explained in your previous mail, why do i need to do recursion here?<br>Can u give me some a little explanation. i think it may be the problem.</span><br><br>:- func inc_freq(T, list({T,int})) =
 list({T,int}).<br>        inc_freq(I, []) = [{I,1}].<br>    inc_freq(I, [{J,N}|Freqs]) =   (if (I = J)<br>                                          then [{J,N+1}|Freqs]   % I's counter incremented, rest untouched<br>                          else Freqs ++ [{J,N}]       % keep J in the list, but increment the<br>                       ).                             
       % frequency of I in Freqs<br>                      <br><br><br style="font-weight: bold;"><span style="font-weight: bold;">I have just put inc_freq(X,FreqList)   as the second argument to the last statement. is is correct?:</span><br><br>:- func tabel_aux(list(T), list({T,int})) = list({T,int}).<br>        tabel_aux([], FreqList) = FreqList.<br>        tabel_aux([X|Xs], FreqList) =  % inc_freq(X,FreqList)  ++<br>                        tabel_aux(Xs,inc_freq(X,FreqList)).<br><br><br><br>Thanks for your help. I appreciate it so much.<br><br>Regards,<br>Eddie.<br><br><br>--- On <b>Fri, 12/17/10, Raphael Collet <i><rco@missioncriticalit.com></i></b>
 wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Raphael Collet <rco@missioncriticalit.com><br>Subject: Re: Yet Another Bug:  Converting List To List Of Tuples<br>To: "win1for@yahoo.com" <win1for@yahoo.com><br>Cc: mercury-users@csse.unimelb.edu.au<br>Date: Friday, December 17, 2010, 11:15 AM<br><br><div class="plainMail">On 12/17/2010 05:02 PM, <a ymailto="mailto:win1for@yahoo.com" href="/mc/compose?to=win1for@yahoo.com">win1for@yahoo.com</a> wrote:<br>> Hi Raphael,<br>><br>> I have made the necessary changes and the code look like this. Now i<br>> have a new error:<br>><br>> this is the code:<br>><br>> ************************************************************************************<br>> :- module oplossing1.<br>><br>> :- interface.<br>> :- import_module io.<br>><br>> :- pred main(io.state::di, io.state::uo) is
 det.<br>><br>> :- implementation.<br>> :- import_module int, list,string,map.<br>><br>> :- func tabel(list(T)) = list({T,int}).<br><br>The compilation error is here:<br><br>> tabel([]) = [].<br>> tabel([X]) = tabel_aux([X], []).<br><br>You handle only lists with zero or one element.  You don't handle *any* <br>list.  Actually tabel_aux works for any list, so you don't need to do <br>pattern matching in tabel...<br><br>><br>><br>> :- func inc_freq(T, list({T,int})) = list({T,int}).<br>> inc_freq(I, []) = [{I,1}].<br>> inc_freq(I, [{J,N}|Freqs]) = (if (I = J)<br>> then [{J,N+1}|Freqs] % I's counter incremented, rest untouched<br>> else Freqs ++ [{J,N}] % keep J in the list, but increment the<br>> ). % frequency of I in Freqs<br><br>Wait, there is a mistake here above.  You don't update Freqs.  Maybe <br>some recursion is needed...<br><br>><br>><br>> :- func tabel_aux(list(T),
 list({T,int})) = list({T,int}).<br>> tabel_aux([], FreqList) = FreqList.<br>> tabel_aux([X|Xs], FreqList) = inc_freq(X,FreqList) ++<br>> tabel_aux(Xs,FreqList).<br><br>I don't understand.  Why are you concatenating frequency lists?<br>inc_freq(X,FreqList) is the updated frequency list after processing X. <br>You should use that one for processing the next element...<br><br>><br>><br>> :- func compare_freq({T,int}, {T,int}) = comparison_result.<br>> compare_freq({_, N1}, {_, N2}) = Result :-<br>> compare(Result, N1, N2).<br>><br>> main(!IO):-<br>> %io.print(tabel(string.to_char_list("this is a test")),!IO),<br>> io.nl(!IO),<br>> io.print(tabel([3,2,1,2,1,1,2]),!IO),<br>> io.nl(!IO).<br>><br></div></blockquote></td></tr></table><br>