開発環境
- 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 4(Conditionals and recursion)のExercises 4-1、2、3、4、5.を取り組んでみる。
Exercises 4-1、2、3、4、5.
コード(Emacs)
#!/usr/bin/env perl6 # 4-1. # 1. sub date($seconds is copy) { my $d = $seconds div (60 * 60 * 24); $seconds = $seconds % (60 * 60 * 24); my $h = $seconds div (60 * 60); $seconds = $seconds % (60 * 60); my $m = $seconds div 60; my $s = $seconds % 60; say "days: $d, hours: $h, minutes: $m, seconds: $s"; } date(0); date(60); date(3600); date(3600 * 24); date(1000000); # 2. date(240000); # 3. my $s = prompt "input a number of seconds: "; date($s.Int); # 4-2. # 1. sub check-fermat($a, $b, $c, $n) { if $n > 2 and $a ** $n + $b ** $n == $c ** $n { say 'Holy smokes, Fermat was wrong!'; } else { say "No, that doesn't work."; } } # 2. my $a = prompt 'a = '; my $b = prompt 'b = '; my $c = prompt 'c = '; my $n = prompt 'n = '; check-fermat($a.Int, $b.Int, $c.Int, $n.Int); # 4-3. sub is-triangle ($a, $b, $c) { if ($a + $b > $c) or ($b + $c > $a) or ($c + $a > $b) { say 'Yes'; } else { say 'No'; } } is-triangle(1, 2, 3); is-triangle(1, 2, 4); is-triangle(2, 4, 1); is-triangle(4, 1, 2); $a = prompt 'a = '; $b = prompt 'b = '; $c = prompt 'c = '; # 2. is-triangle($a.Int, $b.Int, $c.Int); # 4-4. $a = 1; $b = 1; say $a; say $b; for 3..20 { my $t = $a + $b; say $t; $a = $b; $b = $t; } # 2. $n = prompt 'number: '; if $n <= 2 { say 1; } else { my $a = 1; my $b = 1; my $t; for 3..$n.Int { $t = $a + $b; $a = $b; $b = $t; } say $t; } # 4-5. # 1. infinite recursion # 2. $n >= 0
入出力結果(Terminal)
$ ./sample1.pl days: 0, hours: 0, minutes: 0, seconds: 0 days: 0, hours: 0, minutes: 1, seconds: 0 days: 0, hours: 1, minutes: 0, seconds: 0 days: 1, hours: 0, minutes: 0, seconds: 0 days: 11, hours: 13, minutes: 46, seconds: 40 days: 2, hours: 18, minutes: 40, seconds: 0 input a number of seconds: 240000 days: 2, hours: 18, minutes: 40, seconds: 0 a = 3 b = 4 c = 5 n = 3 No, that doesn't work. Yes Yes Yes Yes a = 1 b = 1 c = 2 Yes 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 number: 20 6765 $
0 コメント:
コメントを投稿