Perl 6 数值类型: Numbers

数值的分类(初高中知识)

数值的分类| 用Sketch画的

数值可以分为“实数(Real Number)”和“虚数(Imaginary Number)”,实数又分为“有理数(Rational Number)”和“无理数(Irrational Number)”,有理数又可以分为“整数(Integer)”和“小数(Decimal)”,整数又可以分为“正数(Positive Integer)”,“负数(Negative Integer)”和0。
绿色的是 role(角色), 橘黄色的是 class(类)

就是这么简单明了

Perl 6 中的数值类型

Perl6 提供的数字类型概全了整个数字的各个分类,

  • 角色:Numeric, Real, Rational
  • 类: Complex, Num, Rat, FatRat, Int
  • 类:ComplexStr, NumStr, RatStr, IntStr

数值纯种:Complex/Num/Rat/FatRat/Int

  • Complex 是“虚数”,或者称为“复数”
  • Num是“实数”
  • Rat 是“有理数”
  • Int 是“整数”

这些基础类型都 immutable(不可更改的)

Complex

# 虚数
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

Num

  • is Cool does Real(Cool的方法以及Real方法都可以用)
  • 双精度的数值

Int

整数类型是我们日常中最常用的,

  • 和Perl5一样,数字之间的下划线都会被忽略的,例如2_0_0020002_000一样:不论进制,都可以用下划线分
# 十六进制 
:16<BEFF> 
0xBEFF      # Perl 5/Python中的表示方式
# 八进制
:8<377> 
0o377       # Perl 5/Python中的表示方式
# 二进制
:2<11111111> 
0b121111111 # Perl 5/Python中的表示方式
#不论进制,都可以用下划线分
###########
INT.chr
INT.unival

# 指数之后取余数 (INT ^ POWER) % MODULUS
INT.expmod(POWER,MODULUS)

# 分别递次取余数,
# LIST 中的第一个取余之后的商,作为第二次的被除数,依次...
# 可以方便地把秒 转换成 年月天时分秒
INT.polymod(LIST) 
#不止可以是 Int,Rat,Real也可以这个方法

# 是不是质数
INT.is-prime
#返回数字的二进制形式最右端(lower)为1的index
INT.lsb
#返回数字的二进制形式最左端(higher)为1的index
INT.msb 

###### 从Real角色继承的方法
# from role Real
.Rat #转成有理数类型
.rand 
.sign

# 近似化取值
.round 
.floor 
.ceiling 
.truncate

#转换进制:$n进制,$digit小数位
# $n 必须在2到36, 返回字符串
#因为数字加字母总共就10+26=36位,不然无法表示了
INT.base($n,$digit) 

Rat

  • is Cool does Rational(Cool的方法以及Rational的方法都可以用)
  • 默认的小数都是Rat类型
    • 写出来的有小数点的数都是有理数,因为你不可能写出带点的无理数来。默认都是 Rat 类型

FatRat

相比Rat类,FatRat肥在精度保留

# 构造器
FatRat.new($numerator,$denominator)

# 整型得到FatRat类型
INT.FatRat
# Rat型得到FatRat类型
RAT.FatRat

# 分子
$z.numeritor
# 分母
$z.denominator 
# 分子、分母 List
$z.nude 
# 约分到最小
$z.norm 
#公约数只有1的两个整数/自然数,叫做互质 coprime

# 分式转换成小数
$z.base-repeating($base)
#返回一个 list of 2 Str类型的,分别是小数的`整数部分`,和`小数部分`。如果除不尽,保留 $base 位

数值杂种: 数字字符串杂合体

就是某个类型的数字和 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 类型的数字字符串杂种都一样。
$z = ComplexStr.new($i, $s)
$z.Numeric  #当你把 ComplexStr 类型的时候,调用
$z.Complex  #返回数字部分
$z.Str      #返回字符串部分
$z1 cmp $z2 #True 如果$i,$s 的顺序和值都一样

NumStr

$n = NumStr.new($i,$s)
$n.Num 
$n.Str
$n.Numeric #默认在数字环境下调用
$n1 cmp $n2 #先比对$i.再$s

RatStr

$r = RatStr.new($i,$s)
$r.Rat 
$r.Str 
$r.Numeric
$r1 cmp $r2

IntStr

$i = Int.new($i,$s)
$i.Int 
$i.Str 
$i.Numeric
$i1 cmp $i2

数值角色 role

Numeric角色

# 转换成兼容的其他数值类型
.Real 
.Int 
.Rat 
.Num

#自动把数字转换成最小的能容纳的类型
.narrow

# Log方法
.log 
.log10
# 指数方法
#默认base是e,如果不指定的话
NUM.exp($base) 
# 取根号
NUM.roots($n)
# 绝对值,开平方,
.abs 
.sqrt 
.conj

# 强大的自加自减,可以自加自减数字、字母等
.succ 
.pred 
# Str类也有这个方法,自加自减,但不局限与数字
#对于命名太方便了

Real角色

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

Rational角色

Rational.new($n,$d)
.numerator 
.denominator 
.nude
.norm 
.bash-repeating($base)
#FatRat扮演Rational角色,继承所有方法

Reference

  1. Backup: Numbers in Perl6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 2014年的苹果全球开发者大会(WWDC),当Craig Federighi向全世界宣布“We have new ...
    yeshenlong520阅读 2,231评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 捕获 签名不仅仅是语法,它们是含有一列参数对象的 first-class 对象 。同样地,有一种含有参数集的数据...
    焉知非鱼阅读 531评论 0 0
  • 我叫杨甜,老杨同志是我爸,可我自高中起开始称他为老杨同志。高中的时候老杨同志有了一辆老普桑,将辛苦了四年的面包车...
    22的2姑娘阅读 299评论 0 0
  • 毒药 本剧本纯属虚构,如有雷同纯属巧合~ 版权归属创作者 第 [1] 幕 人物:工北[后简称工],JOEY[后简称...
    X先生阅读 501评论 0 0