《埃拉托斯芬篩法》
在網上見到Perl文言神作,拜服萬分。
由於原著高深,特此在賞析後來個註釋,雅俗共賞。
用籌兮用嚴 井涸兮無礙。
印曰最高矣 又道數然哉。
截起吾純風 賦小入大合。
習予吾陣地 並二至純風。
當起段賦取 加陣地合始。
陣地賦篩始 繫繫此雜段。
終陣地兮印 正道次標哉。
輸空接段點 列終註泰來。
出處: http://cqd.blogspot.hk/2006/04/perl.html?m=1
用籌兮用嚴 井涸兮無礙。
use integer; use strict; # 涸; 無礙;
印曰最高矣 又道數然哉。
print '最高', "數:";
截起吾純風 賦小入大合。
chomp (my $z = <STDIN>);
習予吾陣地 並二至純風。
study unshift my @w, 2 .. $z;
當起段賦取 加陣地合始。
while ($/ = shift +@w) {;
陣地賦篩始 繫繫此雜段。
@w = grep { ~~ $_ % $/
終陣地兮印 正道次標哉。
} @w; print +"next :";
輸空接段點 列終註泰來。
printf " ".$/."\n" } # 泰來
白話註釋
《埃拉托斯芬篩法》
用籌兮用嚴 井涸兮無礙。
use integer; use strict; # 涸; 無礙;
- 籌:計數的用具,多用竹子製成,簽籌;算籌,意謂integer。
- 井涸兮無礙: 詩中「井涸兮無礙」、「註泰來」皆為「虛詞」,沒有程式意義。
- 井:# -> 井
-
井涸兮無礙:食字。 「井涸」, 井乾涸了。「無礙」,沒有大礙。 全句為「井乾涸了也沒有大礙~」,用以呼應上句:「用籌兮用嚴」。「用籌兮用嚴 井涸兮無礙」兩句合意為:若然運用得謹慎,就算遇上井乾涸這樣的情況,也沒有甚麼大礙。
印曰最高矣 又道數然哉。 print '最高', "數:";
印曰/道:Print
又:「,」
數然: 然即「:」,「數:」
-
哉: 助語詞,大慨同「啊」
截起吾純風 賦小入大合。 chomp (my $z = <STDIN>);
-
截: 即C的Trim
Perl的用法為 :「The chomp() function will remove (usually) any newline character from the end of a string. The reason we say usually is that it actually removes any character that matches the current value of $/ (the input record separator), and $/ defaults to a newline.」
起: 「(」
吾:my
純風: 作者以 「天干地支」 「地水火風」為Variable, 而這裡的syntax 「純」代表「$」,「純風」即「$z」
賦: 賦于,Assign
小/大: 分別代表「<」和「>」。
入: Perl中要輸入資料的方法就是使用<STDIN>,故為「入」。
-
合:「)」
習予吾陣地 並二至純風。 study unshift my @w, 2 .. $z;
習予: 「study」直譯。
陣地: 作者以 「天干地支」 「地水火風」為Variable, 而這裡的syntax 「陣」代表「@」。 Perl 「An array is a variable that stores an ordered list of scalar values. Array variables are preceded by an "at" (@) sign」,Array 亦為「陣」之意,故「陣地」則為「@w」。
並二至純風: 並: 合并,即 Perl 的 unshift():
unshift():「This function places the elements from LIST, in order, at the beginning of ARRAY.」
-
純風: 見上,即「$z」
當起段賦取 加陣地合始。 while ($/ = shift +@w) {;
當: 判決、判處(《史記•卷一○七•魏其武安侯傳》:「乃劾魏其矯先帝詔,罪當棄市。」) ,即「while」。
起: 「(」
段: 「$/」,緣為:
「$/: The input record separator, newline by default」
- 取: shift(): 「Shifts the first value of the array off and returns it」
- 加陣地:「+@w」
- 合: 「)」
-
始: 當初;起初 即:「{」
陣地賦篩始 繫繫此雜段。 @w = grep { ~~ $ % $/
陣地賦篩始: 讀到應該開始理解到,陣地(@w) 賦(assign) 篩(grep) 始 ({)
繫繫:「繫繫此雜段」中的「繫繫」為虛詞。 亦為「~~」之形象。數學有言「負負得正」,文中「繫繫」的意思,是把「零」及「壹」反轉兩次,復歸原本,正正帶著「負負得正」的概念。
-
此: 「$_」
「$_:The default input and pattern-searching space」
-
雜:「Binary "%" is the modulo operator」, % 亦為Perl 之HASH,Hash 之直譯為「雜」,Perl hash 例子:
my %petsounds = ("cat" => "meow", "dog" => "woof", "snake" => "hiss");
-
段: 「$/」
終陣地兮印 正道次標哉。 } @w; print +"next :";
終: 「}」
兮: 文言助詞。
印/道: 同解「printf」
正: + 的直譯。
次標: 「next:」的直譯。
-
哉:助語詞,大慨同「啊」
輸空接段點 列終註泰來。 printf " ".$/."\n" } # 泰來
輸: 解「printf」
-
輸空接段點: 神句!!! 「printf " ".$/.」
- printf (輸)
- " " (空)
- . (接)
- $/ (段)
- . (點)
列: 列,解作排成的行,即「\n」。
終: 「}」
註: 註釋,comment。
泰來: 出自 前蜀 韋莊《湘中作》詩:「否去泰來終可待,寒夜休唱《飯牛歌》。」 即「厄運過去,好運到來」之意。