Prologにも少しずつ慣れてきました。
ある程度簡単な計算は、今回の話まででできるようになっているハズです。
ただ、こういう計算は他の言語でやった方がはやいし、Prologの強みを生かせる部分はまだよく理解していないので、習得度でいうと全然ですね。
では、今回やった分を。
再帰を使って、色々な値を求める、というのをやりました。
その中で一つだけ、練習問題であったものを挙げます。
『1からNまでの奇数の2乗の和Sを求めるプログラムを作れ』という問題です。
たとえば、4まで、と与えると、1^2+3^2=10となります。
とりあえず色々やってみることが大切だと思ったので、3パターンで書いてみました。
まずはどういうアイデアでやるかをハッキリさせるため、自分が少しだけできる唯一の言語Schemeで書いてみました。
1番目は、一番シンプルな考え。はじめにNが偶数か奇数か判定して、奇数なら2ずつ引いていって2乗を足していき、偶数ならはじめに1引いて奇数にしてから、同じようにやっていくというやり方。
2番目は、1から順に奇数の2乗の和を足していって、Nを超えたら足すのをやめる、という方針。
そして3番目は、Snという群数列だと考えたときの一般項を書いたやつで、この問題の本質とは関係ないやつです。これが一番動作が速い気もしますが。
というわけで、Prologで書くと多分こうです(一応いくつか確かめはしてみました)。
上と順番は合わせています。
2番目のやつがおそらくは一番自然かと思います。
ただ、やっぱり引数が多いですね。もともとこういう目的のために作られた言語でないということを感じます。
果たして、この本を読み進めていくと、この言語の本質に触れられるのでしょうか。
それは分かりませんが、とりあえずもう少しは読み進めていきたいと思います。
数学的な話も楽しみです。
今回は以上です。