changeset 4:8f21c0f19c09

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 17 Apr 2019 19:03:18 +0900
parents e43f47edd11a
children e87cc0746622
files slide.html slide.md slide.pdf.html
diffstat 3 files changed, 121 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/slide.html	Tue Apr 16 19:04:05 2019 +0900
+++ b/slide.html	Wed Apr 17 19:03:18 2019 +0900
@@ -86,7 +86,7 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.4.2 (2017-09-14) [x86_64-darwin16]
-                on 2019-04-16 19:03:37 +0900 with Markdown engine kramdown (1.16.2)
+                on 2019-04-17 18:16:29 +0900 with Markdown engine kramdown (1.16.2)
                   using options {}
   -->
 <h2 id="section">このセッションの内容</h2>
@@ -158,7 +158,32 @@
 <div class='slide '>
 <!-- _S9SLIDE_  -->
 
-<h2 id="perl6-3">Perl6の処理系の構成</h2>
+<h2 id="perl6-3">Perl6の言語的な特徴</h2>
+
+<ul>
+  <li>型を独自に定義することも可能</li>
+  <li>入力の型によって実行する関数を変える事などができる</li>
+</ul>
+
+<pre lang="perl6"><code>my subset Fizz of Int where * %% 3;
+my subset Buzz of Int where * %% 5;
+my subset FizzBuzz of Int where Fizz&amp;Buzz;
+my subset Number 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 (Number $number) { $number }
+
+fizzbuzz($_).say for 1..15;
+</code></pre>
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_  -->
+
+<h2 id="perl6-4">Perl6の処理系の構成</h2>
 
 <ul>
   <li>Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)</li>
@@ -185,6 +210,21 @@
   <li>NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する</li>
 </ul>
 
+<pre><code>#! nqp
+sub fib($n) {
+    $n &lt; 2 ?? $n !! fib($n-1) + fib($n - 2);
+}
+
+my $N := 29;
+
+my $t0 := nqp::time_n();
+my $z  := fib($N);
+my $t1 := nqp::time_n();
+
+nqp::say("fib($N) = " ~ fib($N));
+nqp::say("time    = " ~ ($t1-$t0));
+</code></pre>
+
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_  -->
--- a/slide.md	Tue Apr 16 19:04:05 2019 +0900
+++ b/slide.md	Wed Apr 17 19:03:18 2019 +0900
@@ -53,6 +53,27 @@
 ```
 
 !SLIDE
+## Perl6の言語的な特徴
+
+- 型を独自に定義することも可能
+- 入力の型によって実行する関数を変える事などができる
+
+```perl6
+my subset Fizz of Int where * %% 3;
+my subset Buzz of Int where * %% 5;
+my subset FizzBuzz of Int where Fizz&Buzz;
+my subset Number 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 (Number $number) { $number }
+
+fizzbuzz($_).say for 1..15;
+```
+
+!SLIDE
 ## Perl6の処理系の構成
 
 - Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)
@@ -70,6 +91,22 @@
 - NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う
 - NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する
 
+```
+#! nqp
+sub fib($n) {
+    $n < 2 ?? $n !! fib($n-1) + fib($n - 2);
+}
+
+my $N := 29;
+
+my $t0 := nqp::time_n();
+my $z  := fib($N);
+my $t1 := nqp::time_n();
+
+nqp::say("fib($N) = " ~ fib($N));
+nqp::say("time    = " ~ ($t1-$t0));
+```
+
 !SLIDE
 ## バイトコード
 - 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する
--- a/slide.pdf.html	Tue Apr 16 19:04:05 2019 +0900
+++ b/slide.pdf.html	Wed Apr 17 19:03:18 2019 +0900
@@ -70,7 +70,7 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.4.2 (2017-09-14) [x86_64-darwin16]
-                on 2019-04-16 19:03:37 +0900 with Markdown engine kramdown (1.16.2)
+                on 2019-04-17 18:16:29 +0900 with Markdown engine kramdown (1.16.2)
                   using options {}
   -->
 <h2 id="section">このセッションの内容</h2>
@@ -142,7 +142,32 @@
 <div class='slide '>
 <!-- _S9SLIDE_  -->
 
-<h2 id="perl6-3">Perl6の処理系の構成</h2>
+<h2 id="perl6-3">Perl6の言語的な特徴</h2>
+
+<ul>
+  <li>型を独自に定義することも可能</li>
+  <li>入力の型によって実行する関数を変える事などができる</li>
+</ul>
+
+<pre lang="perl6"><code>my subset Fizz of Int where * %% 3;
+my subset Buzz of Int where * %% 5;
+my subset FizzBuzz of Int where Fizz&amp;Buzz;
+my subset Number 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 (Number $number) { $number }
+
+fizzbuzz($_).say for 1..15;
+</code></pre>
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_  -->
+
+<h2 id="perl6-4">Perl6の処理系の構成</h2>
 
 <ul>
   <li>Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)</li>
@@ -169,6 +194,21 @@
   <li>NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する</li>
 </ul>
 
+<pre><code>#! nqp
+sub fib($n) {
+    $n &lt; 2 ?? $n !! fib($n-1) + fib($n - 2);
+}
+
+my $N := 29;
+
+my $t0 := nqp::time_n();
+my $z  := fib($N);
+my $t1 := nqp::time_n();
+
+nqp::say("fib($N) = " ~ fib($N));
+nqp::say("time    = " ~ ($t1-$t0));
+</code></pre>
+
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_  -->