zoukankan      html  css  js  c++  java
  • Backup: Numbers in Perl6

    Perl6 is a new language, not a improved version of Perl5.
    Perl6 inherits many good features from many languages, like Python, Perl5, Ruby, ...
    Since so many Perl6 functions has been appended to Perl5 as features, and almost all methods has a subroutine form(in a more Perl5 way).
    A load of subroutines and classes have been added in Perl6, which means you must remember them if you want to use.

    数字类型 in Perl6

    Numbers in Perl6
    绿色的是 role, 橘黄色的是 class in Perl6

    Perl6 提供的数字类型概全了整个数字的各个分类
    Numeric, Real, Rational
    Complex, Num, Rat, FatRat, Int
    ComplexStr, NumStr, RatStr, IntStr

    纯数字类型

    Complex 是虚数/复数
    Num是实数
    Rat 是有理数
    Int 是整数
    这些基础类型都 immutable

    a+bi #用 i 来表示虚位
    COMPLEX.re #返回实部
    COMPLEX.im #返回虚部
    COMPLEX.reals #返回实部虚部 List
    COMPLEX.polar #返回极坐标系的实部虚部 List
    #---
    .floor .ceiling .round .truncate
    #truncate 去掉小数部分,只保留整数
    #---
    COMPLEX.abs # sqrt(($z.re)² + ($z.im)²)
    COMPLEX.conj # 例如 1-4i 返回 1+4i
    #---
    .gist .perl
    

    FatRat

    有理数,arbitrary precicion,不会丢失精度

    FatRat.new($numerator,$denominator)
    INT.FatRat
    RAT.FatRat
    #上面的都可以得到 FatRat 数据类型
    $z.numeritor #返回分子
    $z.denominator #返回分母
    $z.nude #返回分子分母 List
    $z.norm #约分到最小
    #公约数只有1的两个整数/自然数,叫做互质 coprime
    $z.base-repeating($base)
    #返回一个 list of 2 Strs,分别是小数的`整数部分`,和`小数部分`。如果除不尽,保留 $base 位
    

    Int

    :16<BEFF> #十六进制
    0xBEFF
    :8<377> #八进制
    0o377
    :2<11111111> #二进制
    0b121111111
    #不论进制,都可以用下划线分
    #-----------
    INT.chr
    INT.unival
    INT.expmod(POWER,MODULUS) #(INT ^ POWER) % MODULUS
    INT.polymod(LIST) #分别递次取余数
    #不止可以是 Int,Rat,Real也可以
    # LIST 中的第一个取余之后的商,作为第二次的被除数,依次...
    #可以方便地把秒 转换成 年月天时分秒
    #-----------
    INT.is-prime
    INT.lsb #返回数字的二进制形式最右端(lower)为1的index
    INT.msb #返回数字的二进制形式最左端(higher)为1的index
    # from Real
    Rat rand sign round floor ceiling truncate
    INT.base($n,$digit) #转换未$n进制,$digit小数位
    #$n 必须在2到36, 返回字符串
    #因为数字加字母总共就10+26=36位,不然无法表示了
    

    Num

    is Cool does Real
    double precision
    immutable

    Rat

    is Cool does Rational
    你写的有小数点的数都是有理数,因为你不可能写出带点的无理数来。默认都是 Rat 类型


    数字字符串杂合体

    就是某个类型的数字和 Str 的杂合体,都是Str (ComplexStr, NumStr, RatStr, IntStr)这样的。用作数字的时候是数字,用作字符串的时候是 Str。都必须 *Str.new($i, $s)这样定义。第一个参数是对应的数值,第二个是字符串。(i 部分是对应的数字类型,)s 是一个字符串类型的,而且(i,)s 都是必须指定的。
    而对应的
    Str 类型的是字符串和对于类型 bless到一起的,由两部分组成。可以分别提取这两部分。

    ComplexStr

    is Complex is Str,也就是说你把他当 Complex 用,它会调用.Numeric方法返回数字部分,你把它当字符串,它就使用字符串的部分返回。所有的*Str 类型的数字字符串杂种都基本一样。

    ComplexStr.new($i, $s)
    $z.Numeric #当你把 ComplexStr 类型的时候,调用
    $z.Complex #返回数字部分
    $z.Str #返回字符串部分
    $z1 cmp $z2 #True 如果$i,$s 的顺序和值都一样
    

    NumStr

    NumStr.new($i,$s)
    .Num .Str
    .Numeric #在数字环境下调用
    $z1 cmp $z2 #先比对$i.再$s
    

    RatStr

    RatStr.new($i,$s)
    .Rat .Str .Numeric
    $z1 cmp $z2
    

    IntStr

    Int.new($i,$s)
    .Int .Str .Numeric
    $z1 cmp $z2
    

    Role 角色

    Numeric

    .Real .Int .Rat .Num
    .narrow #自动把数字转换成最小的能容纳的类型
    .log .log10
    NUM.exp($base) #默认base是e,如果不指定的话
    NUM.roots($n) #取根号
    .abs .sqrt .conj
    #----
    .succ .pred #Str 也有这个方法,自加自减,但不局限与数字
    #对于命名太方便了
    

    Real

    .Rat($epsilon) #epsilon 定义精度, 把 Real 类型转成 Rat 类型
    .rand .sign .round .floor .ceiling .truncate
    .base($base, $digits) #各种进制的转换
    

    Rational

    Rational.new($n,$d)
    .numerator .denominator .nude
    .norm .bash-repeating($base)
    #和 FatRat 一样的方法
    
    天和地是灰色的,砖和瓦也是灰色的。临街的墙几经风化,几经修补,刷过黑灰、白灰,涂过红漆,书写过不同内容的标语,又终于被覆盖;风雨再把覆盖层胡乱地揭下来,形成一片斑驳的杂色,融汇于灰色的笼罩之中。路旁的树木苍黑,瓦楞中芳草青青。 远处,炊烟缭绕。迷蒙的曙色中,矗立着...
  • 相关阅读:
    团队冲刺--第二阶段(七)
    对搜狗输入法的评价
    团队冲刺--第二阶段(六)
    课堂练习-找水王
    基础
    基础
    基础
    基础
    基础
    基础
  • 原文地址:https://www.cnblogs.com/raybiolee/p/numbers-in-perl6_a-new-language_not-imporved-perl5.html
Copyright © 2011-2022 走看看