Perl 6 中的 .polymod 方法

Perl 6 中的 .polymod 方法 - 把數(shù)字分解成分母

命名

.polymod 方法接受幾個除數(shù)并把它的調(diào)用者分解成一份一份的:

my $seconds = 1 * 60*60*24 # days
            + 3 * 60*60    # hours
            + 4 * 60       # minutes
            + 5;           # seconds

say $seconds.polymod: 60, 60;
say $seconds.polymod: 60, 60, 24;

# OUTPUT:
# (5 4 27)
# (5 4 3 1)

這種情況下我們作為參數(shù)傳遞的除數(shù)是和時間相關(guān)的: 60(每分鐘有多少秒)揭厚, 60(每小時有多少分鐘)框仔,和24(每天有多少小時)捶朵。從最小的單位開始挺份, 我們一直前進到最大的單位浓若。

輸出和輸入的除數(shù)是相匹配的 - 從最小的單位到最大的單位: 5 秒茅坛,4 分鐘观挎,3 小時和 1 天挪凑。

手工制作

不使用 .polymod 而使用一個循環(huán)來展示怎么之前的計算:

my $seconds = 2 * 60*60*24 # days
            + 3 * 60*60    # hours
            + 4 * 60       # minutes
            + 5;           # seconds

my @pieces;
for 60, 60, 24 -> $divisor {
    @pieces.push: $seconds mod $divisor;
    $seconds div= $divisor
}
@pieces.push: $seconds;

say @pieces;

# OUTPUT:
# [5 4 3 2]

超越無限

當除數(shù)是以惰性列表的形式傳遞給 .polymod 方法時荠瘪,它會一直運行直到余數(shù)為零并不會遍歷整個列表:

say 120.polymod:      101, 102, 103, 10?, 10?;
say 120.polymod: lazy 101, 102, 103, 10?, 10?;
say 120.polymod:      101, 102, 103 … ∞;

# OUTPUT:
# (0 12 0 0 0 0)
# (0 12)
# (0 12)

在第一個調(diào)用中夯巷, 我們讓一系列數(shù)字按 10 的冪增長。該調(diào)用的輸出包含了 4 個尾部的零哀墓,因為 .polymod 方法計算了每個除數(shù)趁餐。在第二個調(diào)用中,我們使用 lazy 關(guān)鍵字顯式地創(chuàng)建了一個惰性列表篮绰, 而現(xiàn)在我們在返回的列表中只有 2 個條目后雷。

第一個除數(shù)(10)結(jié)果余數(shù)為 0,這是返回列表中的第一個條目吠各,對于下一個除數(shù)臀突,整除把我們的 120 變成了 12。12 除以 100 的余數(shù)為 12贾漏, 它是返回列表中的第二個條目候学。 現(xiàn)在, 12 整除 100 為 0纵散, 它終止了 .polymod 的執(zhí)行并給了我們兩個 條目的結(jié)果梳码。

在最后一個調(diào)用中,我們使用了省略號伍掀,它是一個序列操作符掰茶,用來創(chuàng)建一系列按 10 的冪增長的數(shù)字,但是這一次序列是無限的硕盹。因為它是惰性的符匾,結(jié)果再一次只有 2 個元素。

Zip It, Lock It, Put It In The Pocket

單獨的數(shù)字很好但是對于它們所代表的單位不夠具有描述性瘩例。我們來使用 Zip 元操作符:

my @units  = <ng μg mg g kg>;
my @pieces = 42_666_555_444_333.polymod: 103 xx ∞;

say @pieces Z~ @units;
# OUTPUT:
# (333ng 444μg 555mg 666g 42kg)

快速命名

對于被調(diào)用者和除數(shù)啊胶,你不僅僅限于使用 Ints,也可以使用其它類型的數(shù)字垛贤。

say ?.polymod: ?;

say 5.Rat.polymod: .3, .2;
say 3.Rat.polymod: ?, ?;

# OUTPUT:
# (0 2)
# (0.2 0 80)
# (0.333333 0 12)
say 5.Num.polymod: .3, .2;
say 3.Num.polymod: ?, ?;

# OUTPUT:
# (0.2 0.199999999999999 79)
# (0.333333333333333 2.22044604925031e-16 12)

使用 Number::Denominate 模塊

Number::Denominate

use Number::Denominate;

my $seconds = 1 * 60*60*24 # days
            + 3 * 60*60    # hours
            + 4 * 60       # minutes
            + 5;           # seconds

say denominate $seconds;
say denominate $seconds, :set<weight>;

# OUTPUT:
# 1 day, 3 hours, 4 minutes, and 5 seconds
# 97 kilograms and 445 grams

你還可以定義自己的單位:

say denominate 449, :units( foo => 3, <bar boors> => 32, 'ber' );

# OUTPUT:
# 4 foos, 2 boors, and 1 ber

原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焰坪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子聘惦,更是在濱河造成了極大的恐慌某饰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異黔漂,居然都是意外死亡诫尽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門炬守,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牧嫉,“玉大人,你說我怎么就攤上這事减途『ㄔ澹” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵鳍置,是天一觀的道長辽剧。 經(jīng)常有香客問我,道長税产,這世上最難降的妖魔是什么怕轿? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮砖第,結(jié)果婚禮上撤卢,老公的妹妹穿的比我還像新娘。我一直安慰自己梧兼,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布智听。 她就那樣靜靜地躺著羽杰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪到推。 梳的紋絲不亂的頭發(fā)上考赛,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音莉测,去河邊找鬼颜骤。 笑死,一個胖子當著我的面吹牛捣卤,可吹牛的內(nèi)容都是我干的忍抽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼董朝,長吁一口氣:“原來是場噩夢啊……” “哼鸠项!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起子姜,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤祟绊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牧抽,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉熊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扬舒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片记舆。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呼巴,靈堂內(nèi)的尸體忽然破棺而出泽腮,到底是詐尸還是另有隱情,我是刑警寧澤衣赶,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布诊赊,位于F島的核電站,受9級特大地震影響府瞄,放射性物質(zhì)發(fā)生泄漏碧磅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一遵馆、第九天 我趴在偏房一處隱蔽的房頂上張望鲸郊。 院中可真熱鬧,春花似錦货邓、人聲如沸秆撮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽职辨。三九已至,卻和暖如春戈二,著一層夾襖步出監(jiān)牢的瞬間舒裤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工觉吭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腾供,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓鲜滩,卻偏偏與公主長得像伴鳖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绒北,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 小學奧數(shù)其實很簡單贴汪,以下是這六個部分的知識點! 1 第一部分(知識點1-6) 2休吠、年齡問題的三個基本特征: ①兩個...
    小一哥閱讀 1,314評論 0 3
  • 第一章數(shù)和數(shù)的運算 一概念 (一)整數(shù) 1整數(shù)的意義 自然數(shù)和0都是整數(shù)扳埂。 2自然數(shù) 我們在數(shù)物體的時候,用來表示...
    meychang閱讀 2,592評論 0 5
  • 小升初的過程中瘤礁,競賽成績能起到相當大的作用阳懂,談到競賽就離不開奧數(shù)。以下是小學奧數(shù)題知識點大匯總: 1.和差倍問題 ...
    滬江中小幼閱讀 1,130評論 0 7
  • 懺悔吟 從沒有此刻如此深念深念神秘的而難以接近的佛 從沒有此刻如此深覺深徹懺悔柜思,便如沉淀下來的濁水污泥不便再攪亂江...
    南溪向南北歌流海閱讀 400評論 0 0
  • 蝶戀花·早行 周邦彥[1] 月皎驚烏棲不定岩调。更漏[2]將殘[3],轤轆[4]牽金井赡盘。喚起兩眸[5]清炯炯[6]号枕,淚...
    古詩新讀閱讀 256評論 0 1