<div dir="ltr"><div>
<div><font face="monospace, monospace">filter([H | T], Search) -></font></div><div><font face="monospace, monospace">    lists:flatten([filter(H, Search, []) | filter(T, Search, [])]).</font></div>

</div><div><br></div><div>and <br></div><div><br></div><div>
<font face="monospace, monospace">filter([], _S, Acc) -> Acc.</font>

<br></div><div></div><div><br></div><div>may be rewrote to</div><div><br></div><div>+ filter(List, Search) -> filter(List, Search, []).</div><div><br></div><div>+ filter([], _, Acc) -> lists:reverse(Acc).<br></div><div><br></div><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 13, 2018 at 9:25 PM, Stanislav Ledenev <span dir="ltr"><<a href="mailto:s.ledenev@gmail.com" target="_blank">s.ledenev@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div class="gmail_quote" dir="auto"><div dir="ltr"><span style="font-family:monospace,monospace">Hello,</span><br></div><div dir="ltr"><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I am new to Erlang and functional programming (1-1.5 months) and have task:</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">1. Suppose we have hierarchical tree-like data structure:</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">  </span>L = [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">             </span>{section, "id1", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                      </span>{section, "id1.1", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                            </span>{policy, "p1", "v1"},</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                         </span>{policy, "p2", "v2"}</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                  </span>]},</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                       </span>{section, "id1.2", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                    </span>]}</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                </span>]},</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">               </span>{section, "id2", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                      </span>{policy, "p3", "v3"}</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">          </span>] },</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">              </span>{section, "id3", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">              </span>] }</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">       </span>]</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">2. <span style="white-space:pre-wrap">      </span>List of some "section"'s with children elements any of which could be</font></div><div><font face="monospace, monospace">another "section" with children or "policy" with name and value.</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">3.<span style="white-space:pre-wrap">   </span>Also we have another list which contains identifiers of policies:</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap"> </span>F = ["p1", "p3"].</font></div><div><span style="white-space:pre-wrap"><font face="monospace, monospace">     </font></span></div><div><font face="monospace, monospace">4.<span style="white-space:pre-wrap">        </span>Now I need to write a function which takes lists L, F and returns list L2</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap"> </span>such as L2 contains only those "section"'s which has "policies" wich Id</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">   </span>equals to those in F. Empty sections must be removed.</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">     </span>For lists L and F result should be:</font></div><div><span style="white-space:pre-wrap"><font face="monospace, monospace">       </font></span></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">  </span>L2 = [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">            </span>{section, "id1", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                      </span>{section, "id1.1", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                            </span>{policy, "p1", "v1"},</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                 </span>]},</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">               </span>]},</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">               </span>{section, "id2", [</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">                      </span>{policy, "p3", "v3"}</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">          </span>] },</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">      </span>]</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">5.<span style="white-space:pre-wrap">       </span>I have solution (please see below) but it seems to me not as good as</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">      </span>it can be and even little weird. I am sure that it could be improved </font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">    </span>and done in proper way.</font></div><div><span style="white-space:pre-wrap"><font face="monospace, monospace">   </font></span></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">  </span>If anyone could give me any glimpse or advice I would appreciate.</font></div><div><font face="monospace, monospace"><br></font></div><div><span style="white-space:pre-wrap"><font face="monospace, monospace"> </font></span></div><div><font face="monospace, monospace">Source:</font></div><div><font face="monospace, monospace">------------------------------<wbr>------------------------------<wbr>---------------</font></div><div><font face="monospace, monospace">main() -></font></div><div><font face="monospace, monospace">    L = [</font></div><div><font face="monospace, monospace">            {section, "id1", [</font></div><div><font face="monospace, monospace">                {section, "id1.1", [</font></div><div><font face="monospace, monospace">                    {policy, "p1", "v1"},</font></div><div><font face="monospace, monospace">                    {policy, "p2", "v2"}</font></div><div><font face="monospace, monospace">                ]},</font></div><div><font face="monospace, monospace">                {section, "id1.2", [</font></div><div><font face="monospace, monospace">                ]}</font></div><div><font face="monospace, monospace">            ]},</font></div><div><font face="monospace, monospace">            {section, "id2", [</font></div><div><font face="monospace, monospace">                {policy, "p3", "v3"}</font></div><div><font face="monospace, monospace">            ] },</font></div><div><font face="monospace, monospace">            {section, "id3", [</font></div><div><font face="monospace, monospace">            ] }</font></div><div><font face="monospace, monospace">        ],</font></div><div><font face="monospace, monospace">    %filter(L, ["p1", "p3"]).</font></div><div><font face="monospace, monospace">    filter(L, ["p3"]).</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">filter([H | T], Search) -></font></div><div><font face="monospace, monospace">    lists:flatten([filter(H, Search, []) | filter(T, Search, [])]).</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">filter({section, I, C}, Search, _Acc) -></font></div><div><font face="monospace, monospace">    NewC = filter(C, Search, []),</font></div><div><font face="monospace, monospace">    case NewC of</font></div><div><font face="monospace, monospace">        [] -> [];</font></div><div><font face="monospace, monospace">        _ -> {section, I, NewC}</font></div><div><font face="monospace, monospace">    end;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">filter([{section, I, C} | T], Search, Acc) -></font></div><div><font face="monospace, monospace">    NewC = filter(C, Search, []),</font></div><div><font face="monospace, monospace">    case NewC of</font></div><div><font face="monospace, monospace">        [] -> filter(T, Search, Acc);</font></div><div><font face="monospace, monospace">        _ -> filter(T, Search, [{section, I, NewC} | Acc])</font></div><div><font face="monospace, monospace">    end;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">filter([{policy, I, V} | T], Search, Acc) -></font></div><div><font face="monospace, monospace">    case lists:member(I, Search) of</font></div><div><font face="monospace, monospace">        true -> filter(T, Search, [{policy, I, V} | Acc]);</font></div><div><font face="monospace, monospace">        false -> filter(T, Search, Acc)</font></div><div><font face="monospace, monospace">    end;</font></div><div><font face="monospace, monospace">filter([], _S, Acc) -> Acc.</font></div><span class="gmail-HOEnZb"><font color="#888888"><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">-- Stanislav Ledenev<br></font></div></font></span></div>
</div></div>
<br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div><br></div>Best Regards.<div><br></div><div>--- Y-H. H.</div><div><br></div></div>
</div></div>