開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Perl 6 (プログラミング言語)
- Rakudo(コンパイラ、実装)
Think Perl 6: How to Think Like a Computer Scientist (Laurent Rosenfeld(著)、Allen B. Downey(著)、Oreilly & Associates Inc)のPart 1(Starting with the basics)、Chapter 5(Fruitful Subroutines)の Exercises.を取り組んでみる。
Exercises.
コード(Emacs)
#!/usr/bin/env perl6
# -*- coding: utf-8 -*-
say '2.';
sub ack($m, $n) {
return $n + 1 if $m == 0;
return ack($m - 1, 1) if $m > 0 and $n == 0;
return ack($m - 1, ack($m, $n - 1));
}
for 1..3 -> $m {
for 1..4 -> $n {
say "ack($m, $n) => ", ack($m, $n);
}
}
say '3-1.';
sub first_l(Str $word) {
return substr $word, 0, 1;
}
sub last_l(Str $word) {
return substr $word, *-1, 1;
}
sub middle_l(Str $word) {
return substr $word, 1, *-1;
}
say '3-2.';
say middle_l('ab');
# say middle_l('a');
# say middle_l('');
sub middle_l1(Str $word where $word.chars > 1) {
return substr $word, 1, *-1;
}
sub is-palindrome(Str $word) {
return True if $word.chars <= 1;
return is-palindrome middle_l1($word) if first_l($word) eq last_l($word);
False;
}
say is-palindrome '';
say is-palindrome 'a';
say not is-palindrome 'ab';
say is-palindrome 'aba';
say not is-palindrome 'abc';
say is-palindrome 'abba';
say not is-palindrome 'abca';
say '4.';
sub is-power-of($a, $b) {
return True if $a == 1;
return $a %% $b and is-power-of($a / $b , $b);
}
for 1..20 -> $a {
for 2..3 -> $b {
if is-power-of($a, $b) {
say "$a is power of $b";
} else {
say "$a is not power of $b";
}
}
}
say '5.';
sub gcd($a, $b) {
return $a if $b == 0;
return gcd($b, $a % $b);
}
for 2..10 -> $a {
for 2..10 -> $b {
say "($a, $b) = ", gcd($a, $b);
}
}
入出力結果(Terminal, REPL)
$ ./sample1.pl 2. ack(1, 1) => 3 ack(1, 2) => 4 ack(1, 3) => 5 ack(1, 4) => 6 ack(2, 1) => 5 ack(2, 2) => 7 ack(2, 3) => 9 ack(2, 4) => 11 ack(3, 1) => 13 ack(3, 2) => 29 ack(3, 3) => 61 ack(3, 4) => 125 3-1. 3-2. True True True True True True True 4. 1 is power of 2 1 is power of 3 2 is power of 2 2 is not power of 3 3 is not power of 2 3 is power of 3 4 is power of 2 4 is not power of 3 5 is not power of 2 5 is not power of 3 6 is power of 2 6 is power of 3 7 is not power of 2 7 is not power of 3 8 is power of 2 8 is not power of 3 9 is not power of 2 9 is power of 3 10 is power of 2 10 is not power of 3 11 is not power of 2 11 is not power of 3 12 is power of 2 12 is power of 3 13 is not power of 2 13 is not power of 3 14 is power of 2 14 is not power of 3 15 is not power of 2 15 is power of 3 16 is power of 2 16 is not power of 3 17 is not power of 2 17 is not power of 3 18 is power of 2 18 is power of 3 19 is not power of 2 19 is not power of 3 20 is power of 2 20 is not power of 3 5. (2, 2) = 2 (2, 3) = 1 (2, 4) = 2 (2, 5) = 1 (2, 6) = 2 (2, 7) = 1 (2, 8) = 2 (2, 9) = 1 (2, 10) = 2 (3, 2) = 1 (3, 3) = 3 (3, 4) = 1 (3, 5) = 1 (3, 6) = 3 (3, 7) = 1 (3, 8) = 1 (3, 9) = 3 (3, 10) = 1 (4, 2) = 2 (4, 3) = 1 (4, 4) = 4 (4, 5) = 1 (4, 6) = 2 (4, 7) = 1 (4, 8) = 4 (4, 9) = 1 (4, 10) = 2 (5, 2) = 1 (5, 3) = 1 (5, 4) = 1 (5, 5) = 5 (5, 6) = 1 (5, 7) = 1 (5, 8) = 1 (5, 9) = 1 (5, 10) = 5 (6, 2) = 2 (6, 3) = 3 (6, 4) = 2 (6, 5) = 1 (6, 6) = 6 (6, 7) = 1 (6, 8) = 2 (6, 9) = 3 (6, 10) = 2 (7, 2) = 1 (7, 3) = 1 (7, 4) = 1 (7, 5) = 1 (7, 6) = 1 (7, 7) = 7 (7, 8) = 1 (7, 9) = 1 (7, 10) = 1 (8, 2) = 2 (8, 3) = 1 (8, 4) = 4 (8, 5) = 1 (8, 6) = 2 (8, 7) = 1 (8, 8) = 8 (8, 9) = 1 (8, 10) = 2 (9, 2) = 1 (9, 3) = 3 (9, 4) = 1 (9, 5) = 1 (9, 6) = 3 (9, 7) = 1 (9, 8) = 1 (9, 9) = 9 (9, 10) = 1 (10, 2) = 2 (10, 3) = 1 (10, 4) = 2 (10, 5) = 5 (10, 6) = 2 (10, 7) = 1 (10, 8) = 2 (10, 9) = 1 (10, 10) = 10 $
0 コメント:
コメントを投稿