開発環境
- 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)のChapter 5(Fruitful subroutines)のExercises 5-1、2、3、4、5.を取り組んでみる。
Exercises 5-1、2、3、4、5.
コード(Emacs)
#!/usr/bin/env perl6
# 5-1.
# 8100
# 5-2.
sub ack($m, $n) {
return $n + 1 if $m == 0;
return ack($m - 1, 1) if $m > 0 and $n == 0;
ack($m - 1, ack($m, $n - 1));
}
say ack(3, 4);
# 5-3.
sub first_l(Str $word) {
substr $word, 0, 1;
}
sub last_l(Str $word) {
substr $word, *-1, 1;
}
sub middle_l(Str $word) {
substr $word, 1, *-1;
}
sub is-palindrome($word) {
return True if $word.chars <= 1;
first_l($word) eq last_l($word) and is-palindrome(middle_l($word));
}
say is-palindrome('');
say is-palindrome('a');
say is-palindrome('noon');
say is-palindrome('redivider');
say is-palindrome('perl 6');
# 5-4.
sub is-power-of ($a, $b) {
return False if $b == 1 and $a != 1;
return True if $a == 1;
$a %% $b and is-power-of($a / $b, $b);
}
for 1..10 -> $a {
for 1..10 -> $b {
if is-power-of $a, $b {
say "$a is power of $b";
} else {
say "$a is not power of $b";
}
}
}
# 5-5.
sub gcd($a, $b) {
return $a if $b == 0;
gcd($b, $a % $b);
}
for 1..10 -> $a {
for 1..10 -> $b {
say "gcd($a, $b) => ", gcd($a, $b);
}
}
入出力結果(Terminal)
$ ./sample1.pl 125 True True True True False 1 is power of 1 1 is power of 2 1 is power of 3 1 is power of 4 1 is power of 5 1 is power of 6 1 is power of 7 1 is power of 8 1 is power of 9 1 is power of 10 2 is not power of 1 2 is power of 2 2 is not power of 3 2 is not power of 4 2 is not power of 5 2 is not power of 6 2 is not power of 7 2 is not power of 8 2 is not power of 9 2 is not power of 10 3 is not power of 1 3 is not power of 2 3 is power of 3 3 is not power of 4 3 is not power of 5 3 is not power of 6 3 is not power of 7 3 is not power of 8 3 is not power of 9 3 is not power of 10 4 is not power of 1 4 is power of 2 4 is not power of 3 4 is power of 4 4 is not power of 5 4 is not power of 6 4 is not power of 7 4 is not power of 8 4 is not power of 9 4 is not power of 10 5 is not power of 1 5 is not power of 2 5 is not power of 3 5 is not power of 4 5 is power of 5 5 is not power of 6 5 is not power of 7 5 is not power of 8 5 is not power of 9 5 is not power of 10 6 is not power of 1 6 is not power of 2 6 is not power of 3 6 is not power of 4 6 is not power of 5 6 is power of 6 6 is not power of 7 6 is not power of 8 6 is not power of 9 6 is not power of 10 7 is not power of 1 7 is not power of 2 7 is not power of 3 7 is not power of 4 7 is not power of 5 7 is not power of 6 7 is power of 7 7 is not power of 8 7 is not power of 9 7 is not power of 10 8 is not power of 1 8 is power of 2 8 is not power of 3 8 is not power of 4 8 is not power of 5 8 is not power of 6 8 is not power of 7 8 is power of 8 8 is not power of 9 8 is not power of 10 9 is not power of 1 9 is not power of 2 9 is power of 3 9 is not power of 4 9 is not power of 5 9 is not power of 6 9 is not power of 7 9 is not power of 8 9 is power of 9 9 is not power of 10 10 is not power of 1 10 is not power of 2 10 is not power of 3 10 is not power of 4 10 is not power of 5 10 is not power of 6 10 is not power of 7 10 is not power of 8 10 is not power of 9 10 is power of 10 gcd(1, 1) => 1 gcd(1, 2) => 1 gcd(1, 3) => 1 gcd(1, 4) => 1 gcd(1, 5) => 1 gcd(1, 6) => 1 gcd(1, 7) => 1 gcd(1, 8) => 1 gcd(1, 9) => 1 gcd(1, 10) => 1 gcd(2, 1) => 1 gcd(2, 2) => 2 gcd(2, 3) => 1 gcd(2, 4) => 2 gcd(2, 5) => 1 gcd(2, 6) => 2 gcd(2, 7) => 1 gcd(2, 8) => 2 gcd(2, 9) => 1 gcd(2, 10) => 2 gcd(3, 1) => 1 gcd(3, 2) => 1 gcd(3, 3) => 3 gcd(3, 4) => 1 gcd(3, 5) => 1 gcd(3, 6) => 3 gcd(3, 7) => 1 gcd(3, 8) => 1 gcd(3, 9) => 3 gcd(3, 10) => 1 gcd(4, 1) => 1 gcd(4, 2) => 2 gcd(4, 3) => 1 gcd(4, 4) => 4 gcd(4, 5) => 1 gcd(4, 6) => 2 gcd(4, 7) => 1 gcd(4, 8) => 4 gcd(4, 9) => 1 gcd(4, 10) => 2 gcd(5, 1) => 1 gcd(5, 2) => 1 gcd(5, 3) => 1 gcd(5, 4) => 1 gcd(5, 5) => 5 gcd(5, 6) => 1 gcd(5, 7) => 1 gcd(5, 8) => 1 gcd(5, 9) => 1 gcd(5, 10) => 5 gcd(6, 1) => 1 gcd(6, 2) => 2 gcd(6, 3) => 3 gcd(6, 4) => 2 gcd(6, 5) => 1 gcd(6, 6) => 6 gcd(6, 7) => 1 gcd(6, 8) => 2 gcd(6, 9) => 3 gcd(6, 10) => 2 gcd(7, 1) => 1 gcd(7, 2) => 1 gcd(7, 3) => 1 gcd(7, 4) => 1 gcd(7, 5) => 1 gcd(7, 6) => 1 gcd(7, 7) => 7 gcd(7, 8) => 1 gcd(7, 9) => 1 gcd(7, 10) => 1 gcd(8, 1) => 1 gcd(8, 2) => 2 gcd(8, 3) => 1 gcd(8, 4) => 4 gcd(8, 5) => 1 gcd(8, 6) => 2 gcd(8, 7) => 1 gcd(8, 8) => 8 gcd(8, 9) => 1 gcd(8, 10) => 2 gcd(9, 1) => 1 gcd(9, 2) => 1 gcd(9, 3) => 3 gcd(9, 4) => 1 gcd(9, 5) => 1 gcd(9, 6) => 3 gcd(9, 7) => 1 gcd(9, 8) => 1 gcd(9, 9) => 9 gcd(9, 10) => 1 gcd(10, 1) => 1 gcd(10, 2) => 2 gcd(10, 3) => 1 gcd(10, 4) => 2 gcd(10, 5) => 5 gcd(10, 6) => 2 gcd(10, 7) => 1 gcd(10, 8) => 2 gcd(10, 9) => 1 gcd(10, 10) => 10 $
0 コメント:
コメントを投稿