http://qs1969.pair.com?node_id=162718


in reply to TIMTOWTDI and other languages

How about Perl 6 (I think): @intersection = grep $_ =~ @betas, @alphas;

Replies are listed 'Best First'.
Re: Re: TIMTOWTDI and other languages
by abstracts (Hermit) on Apr 28, 2002 at 22:21 UTC
    Looks like a double loop to me. The grep loop and the =~ loop unless perl will replace =~ LIST with hash lookups.
      It is a double loop; what's your point? This isn't "come up with the most efficient way to do X", or "do X without using a nested loop", it is (at least so far as I am interested) "show me idiomatic ways to do X". To quote Ovid, "I am wondering how different types of languages would solve the problem of identifying elements in one array that exist in another". I suppose Perl 6 isn't a different type of language than (recent) previous versions of Perl, but I thought the DWIM aspect of the Perl 6 code made the example worth posting.
        Sorry if I offended you, but I was under the impression that Ovid wanted to see efficient solutions when he said: Two 100 element arrays leads to 10,000 iterations. So, how do you solve the scalability issue?

        I could very well be wrong.

Re: Re: TIMTOWTDI and other languages
by mdillon (Priest) on Apr 29, 2002 at 16:19 UTC
    Actually, I was thinking about this some and was wondering whether the following would be valid code in Perl 6: @intersection = @alphas =~ @betas; Does anyone know if this will actually work? I looked through the Apocalypses and Exegeses, but I couldn't find any hints of how Perl 6's "smart match" (=~) operator will behave in list context. Unfortunately, searching for "=~" isn't something that search engines make straightforward, so I didn't know how to go about looking elsewhere.

    With this more neutral syntax, given the right properties on the arrays involved (e.g. predeclared as "int", and with an is presorted or some such), it may even be possible at compile time to translate some uses of this idiom into efficient, optimized searches instead of the naive, linear default.

      @intersection = @alphas =~ @betas;
      Does anyone know if this will actually work?

      I seriously doubt it. Larry has never even hinted that =~ will operate like that in a list context.

      Of course, if superpositions do get in then this:

      @intersection = eigenstates(any @alphas =~ any @betas);

      would work.

      And it's possible that the eigenstates operator is superfluous; that a superposition in a list context just yields its eigenstates automatically. In which case you only need this:

      @intersection = any @alphas =~ any @betas;