
With friends like these - lizmat
http://blogs.perl.org/users/damian_conway/2019/08/with-friends-like-these.html
======
Sniffnoy
I'm surprised this article doesn't optimize a little further. If you want to
compute σ(n), and you can prime factor n, there's no need to go determining
all the divisors of n and then adding them up. The σ function is
multiplicative, i.e., one has σ(nm)=σ(n)σ(m) when (n,m)=1. So if you've
factored n = p_1^a_1 * ... * p_k^a_k, it suffices to compute σ(p_i^a_i) for
each i and then multiply them together.

Meanwhile, while computing σ(p^a) can be done by summing, it can be done even
more simply by noting that this is a geometric series and so sums to
(p^(a+1)-1)/(p-1).

Edit: Actually, not sure how this latter way compares to just doing Horner.
Probably about the same, I imagine. I guess Horner would be the right way to
do it if division is expensive for some reason.

------
saagarjha
> which we extract and store in an appropriate Unicode-named variable: pₗpₘpₙ.

Which my phone unfortunately doesn’t render :(

~~~
TheRealPomax
Time to hack some more fonts into your phone.

~~~
kleiba
Why "hack"?

~~~
kleiba
Would love to know why my comment got downvoted...

------
jsjohnst
Rather tangential, but:

> Perl 6 aims to let us express ourselves in whichever notation we find most
> convenient, comfortable, and comprehensible.

Is the reason I’ve always hated Perl once I started using it in a team context
vs personal projects. The diversity of code styles even on your own Perl code
over the years changes more than other languages I’ve used, let alone taking
into account lots of other developers too.

<3 Damian’s articles and talks though, so this isn’t meant as a detractor on
him.

------
userbinator
With all the special characters in source code and attempts at a terse syntax
for array-ish operations, it looks like Perl is trying to become APL. But
statements like

    
    
        return unique flat small-divisors, big-divisors;
    

are ambiguous even to a human, because '-' is usually used for subtraction,
but I guess Perl's parser somehow manages to disambiguate (between a single
variable named 'small-divisors', and the subtraction of 'small' and
'divisor')?

~~~
masak
Yes. Somewhat simplified, hyphens inside of identifiers are allowed and not
taken to mean infix minus.

I remember when this was switched on. Larry Wall tried it out on the entire
spectest suite, and nothing broke (or at most one random thing broke), because
basically people already put whitespace around their infix operators.

Incidentally, apostrophes are also allowed inside Perl 6 identifiers.

Personally, I used to conservatively use underscore (`_`) in my Perl 6
identifiers for some years. Then I got used to hyphens, and it's hard to go
back.

~~~
zwkrt
Hyphens and question marks in identifiers is actually the biggest feature I
wish other languages would steal from Lisp. It does help that lisp doesn’t
suffer from the “is it an infix operator?” parsing problem, which exists for
both programmatic and meat-based compilers.

~~~
DonHopkins
Then you'd love FORTH. Why limit yourself to hyphens and question marks? The
only character you can't use in a FORTH identifier is space.

    
    
        FORTH ?KNOW IF HONK ELSE FORTH LEARN THEN
    
        : C(-; LICK SMILE NOSE WINK ;
    
        \ FORTH PAPER TAPE PUNCHER:
    
        : PT# ( L --- L/2 )
          DUP 1 AND IF 
            ASCII @ 
          ELSE BL THEN
          HOLD
          2/
        ;
    
        : PT. ( N --- )
          <# PT# PT# PT# 
             ASCII . HOLD
             PT# PT# PT# PT#
          #> TYPE
        ;
    
        : CUT
          ." -----------" CR
        ;
    
        : PTAPE
          CUT
          BEGIN
            KEY ?DUP WHILE
            DUP ." |" PT. ." |"  SPACE EMIT CR
          REPEAT
          CUT
        ;

