I have not benchmarked it, but I believe the recursive approach would be better
``` defmodule MyList do def contains?(list, sublist, strict? \\ false) def contains?(_, [], _), do: true def contains?([], _, _), do: false def contains?([h | t], [hh | _] = sub, strict?) when h != hh, do: not strict? and contains?(t, sub, strict?) def contains?([h | t], [h | tt], strict?), do: contains?(t, tt, true) or contains?(t, [h | tt], strict?) end ``` On Fri, Jul 15, 2022 at 2:07 PM 'eksperimental' via elixir-lang-core < [email protected]> wrote: > Hi Julian. > It think it is a good addition. > It is also analog to String.contains?/2 > > On Fri, 15 Jul 2022 04:58:59 -0700 (PDT) > Julian Somoza < > https://urldefense.proofpoint.com/v2/url?u=http-3A__julian.somoza-40gmail.com&d=DwICaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=rmhwzhuTk1LyLPLZIrqkat6wS6r2qE3XZKnTTHGaxH8&m=rZfYwgMRyMdd1mpKac91VLHbd0qUJlcEVeNzbceWXvE&s=T8KKoaIf0UYlrJ_VQC1Qv_48Tje2jygIaQysVTXu2c0&e=> > wrote: > > > Hi everyone, I was working on a suggestion to add a new function on > > the List module in order to find out if a given sublist is inside > > another list. > > > > We currently have *List.starts_with?/2* but this only match the > > beginning: > > > > iex(1)> List.starts_with?([1, 2, 3], [1, 2]) > > true > > > > Besides, we have *MapSet.subset*, but it ignores the elements order: > > > > iex(1)> MapSet.subset?(MapSet.new([1, 2]), MapSet.new([1, 2, 3])) > > true > > > > iex(1)> MapSet.subset?(MapSet.new([2, 1]), MapSet.new([1, 2, 3])) > > true > > > > I suggest a new function that works like *List.starts_with?/2* but > > matches the entire list, either at the beginning, middle, or end of > > the list. > > > > iex(1)> List.includes_sublist?([1,2,3,4,5], [2,3]) > > true > > > > iex(1)> List.includes_sublist?([1,2,3,4,5], [1,2]) > > true > > > > iex(1)> List.includes_sublist?([1,2,3,4,5], [3,4,5]) > > true > > > > iex(1)> List2.includes_sublist?([1,2,3,4,5], [1,5]) > > false > > > > I'm sharing with you also the function code: > > > > > https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_elixir-2Dlang_elixir_pull_11987_commits_2b7eba5f6419f906f565e7d4bfe3d687f3b8b052&d=DwICaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=rmhwzhuTk1LyLPLZIrqkat6wS6r2qE3XZKnTTHGaxH8&m=rZfYwgMRyMdd1mpKac91VLHbd0qUJlcEVeNzbceWXvE&s=rqpOP9kyNDkOSBV-I2zlHssI6EVLQQ-iBW1F0k3nqFg&e= > > > > I aim to complement the List.starts_with?/2. This function could be > > the same or even more useful because it finds the ordered sublist > > also in the middle or in the end. > > > > Looking forward for your comments, > > BR, > > Julian Somoza. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://urldefense.proofpoint.com/v2/url?u=https-3A__groups.google.com_d_msgid_elixir-2Dlang-2Dcore_62d1588e.1c69fb81.3332c.1d2dSMTPIN-5FADDED-5FMISSING-2540gmr-2Dmx.google.com&d=DwICaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=rmhwzhuTk1LyLPLZIrqkat6wS6r2qE3XZKnTTHGaxH8&m=rZfYwgMRyMdd1mpKac91VLHbd0qUJlcEVeNzbceWXvE&s=Ckh5t8xdml-Vx3UgfKMNxh3CoSb8IBfBORyYgVxcXsg&e= > . > -- *Aleksei Matiushkin*, Software Engineer - R&D Office (+34) 935 679 834 8 Devonshire Square, London, EC2M 4PL, United Kingdom Torre Mapfre, Planta 22, Marina, 16-18, 08005 Barcelona, Spain *kantox.com <http://kantox.com/>* <http://www.linkedin.com/company/1871617> <http://www.linkedin.com/company/1871617>[image: LinkedIn] <https://www.linkedin.com/company/1871617> <https://twitter.com/kantox>[image: Twitter] <https://twitter.com/kantox> <http://www.youtube.com/user/kantoxfx>[image: YouTube] <https://www.youtube.com/user/kantoxfx> Kantox Limited is a UK private company with registered company number 07657495 and registered address at 8 Devonshire Square, London EC2M 4PL, United Kingdom. We are authorised with the UK Financial Conduct Authority (FCA) under the Payment Service Regulation 2017 as a Payments Institution (FRN 580343) for the provision of payment services and with HMRC as a Money Service Business Registration No.12641987. Kantox European Union, S.L. is a Spanish private company with tax ID number B67369371 and registered address at Torre Mapfre, Planta 22, Marina, 16-18, 08005 Barcelona, Spain. Kantox is authorized by the Bank of Spain, with registration number 6890, which is the supervisor of the Spanish banking system along with the European Central Bank. Additionally, we are supervised by SEPBLAC, the Supervisory Authority for the prevention of money laundering and terrorist financing in Spain. KANTOX is the Controller for the processing of data in accordance with the GDPR and LOPDGDD for the purpose of maintaining a commercial relationship. You may exercise your rights of access and rectification, portability, restriction and opposition by writing to KANTOX to the email: [email protected]. You have your right to make a complaint at www.aepd.es. -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGF5_6efo17fReu7sLXYxAO_%3DBdSiPFRSuf_Y1MiKNt1owsoYw%40mail.gmail.com.
