changeset 78:a456a90f9f35

add perl6 sample code
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 18 Feb 2019 20:29:10 +0900
parents 2327c951dfb9
children 0d4418a76093
files paper/chapter3.tex paper/codes/fizzbuzz.p6 paper/codes/grammer.p6 paper/main.pdf
diffstat 4 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter3.tex	Mon Feb 18 19:46:14 2019 +0900
+++ b/paper/chapter3.tex	Mon Feb 18 20:29:10 2019 +0900
@@ -8,8 +8,16 @@
 実装は歴史的に様々なものが開発されており、 Haskellで実装されたPugs、 Pythonとの共同実行環境を目指したParrotなどが存在する。
 PugsやParrotは現在は歴史的な実装となっており、 開発は行われていない。
 現在の主要な実装であるRakudoは、 Parrotと入れ替わる形で実装が進んでいる。
-Perl6そのものはスクリプト言語として実装されており、 漸進的型付け言語である。
+
+Perl6そのものはスクリプト言語として実装されている。
+また、 Perl5の様に型が無い様にも振る舞えるが、 TypeScriptの様に型がある様にも振る舞う事が出来る。
+この型システムの特徴を、漸進的型付けと呼び、 Perl6は漸進的型付け言語である。
 言語的な特徴としては、 独自にPerl6の文法を拡張可能なGrammer、 Perl5と比較してオブジェクト指向言語としての機能の強化などが見られる。
+Perl6の実際のサンプルコードをソースコード\ref{perl6_grammer}とソースコード\ref{p6_fizzbuzz}に示す。
+
+\lstinputlisting[frame=lrbt, label=perl6_grammer, caption=Perl6のGrammerを利用したサンプルコード]{./codes/grammer.p6}
+\lstinputlisting[frame=lrbt, label=p6_fizzbuzz, caption=Perl6の型システムを利用したfizzbuzz]{./codes/fizzbuzz.p6}
+
 
 Perl6は言語的な仕様や、 実装がPerl5と大幅に異なっており、 言語的な互換性が存在しない。
 その為、 現在ではPerl5とPerl6は別言語として開発されており、 Perl6は主要な処理系であるRakudoから名前を取り、 Rakuという別名がついている。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/codes/fizzbuzz.p6	Mon Feb 18 20:29:10 2019 +0900
@@ -0,0 +1,12 @@
+my subset Fizz of Int where * %% 3;
+my subset Buzz of Int where * %% 5;
+my subset FizzBuzz of Int where Fizz&Buzz;
+my subset OtherNumber of Int where none Fizz|Buzz;
+
+proto sub fizzbuzz ($) { * }
+multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" }
+multi sub fizzbuzz (Fizz) { "Fizz" }
+multi sub fizzbuzz (Buzz) { "Buzz" }
+multi sub fizzbuzz (OtherNumber $number) { $number }
+
+fizzbuzz($_).say for 1..15;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/codes/grammer.p6	Mon Feb 18 20:29:10 2019 +0900
@@ -0,0 +1,11 @@
+grammar Parser {
+    rule  TOP  { I <love> <lang> }
+    token love { '♥' | love }
+    token lang { < Perl Rust Go Python Ruby > }
+}
+
+say Parser.parse: 'I ♥ Perl';
+# OUTPUT: 「I ♥ Perl」 love => 「♥」 lang => 「Perl」
+
+say Parser.parse: 'I love Rust';
+# OUTPUT: 「I love Rust」 love => 「love」 lang => 「Rust」
Binary file paper/main.pdf has changed