EIWL28AVTake2
0 (0 Likes / 0 Dislikes)
Wolframによる「はじめてのWolfram言語」のセクション28では,
判定を取り上げる.
判定とは,何かが真であるか偽であるかの判定である.
また,条件式についても取り上げる.
条件式とは,判定結果によって関数が別のことを行う関数を意味する.
判定と条件式はどのコンピュータプログラムにおいても,基本的で低レベルの部分である.
判定の簡単な例として,2つのものが等しいか等しくないかという判定が挙げられる.
これはWolfram言語では2つの等号を使って入力できる.
例えばこの判定式は 2+2 が 4 に等しいかどうかを判定する.
一方がもう一方より大きいか小さいかの判定には
キーボードの大なり,小なりの記号が使える.
例として, 2+2 が 5 より大きいかどうかを確認する.
2+2 は 5 より大きくないので,結果として「False」が返される.
判定結果によって異なる結果を返す関数がいくつかある.
これはこのセクションのタイトルにもある「条件式」である.
このような条件式の一つに If 関数がある.
例えばこの If 関数は,判定結果が True の場合は x を,
False の場合は y を返す.
If 関数を純関数の中で使うと,もっと複雑なことが行える.
これは引数が 4 未満の場合は x,
引数が 4 未満でない場合は y を返す純関数である.
この純関数をリストにマップすると,
4 未満の要素がすべての x で,
4 未満でない要素がすべて y で置き換えられる.
等号否定の判定もある.
これは感嘆符に続いて等号をタイプして入力する.
以下であるかどうかの判定のための小なりイコールは,小なり記号に続けて等号を,
以上の判定のための大なりイコールは,大なり記号に続けて等号をタイプして入力する.
この例では,純関数と等号否定をリストのすべての要素に適用して,
4 以外の要素を x で,4 を y で置き換える.
これらの文字をタイプする際,
その操作の通常の数学表記に自動的に置き換えられるものがある.
例えば小なり記号に続いて等号を入力すると,
この入力の外に移動した瞬間に,
小なりイコールの特別な記号が自動的に表示される.
これによって入力が従来の数学表記に近い形となる.
判定結果によって異なることを行う条件式には,この他に
Select 関数がある.
Select 関数はリストの中から判定式を満足するものを選び出すのに使用できる.
例えば,これは 3 より大きいものについて True を返す判定式で,
これは Select 関数の中で判定式を使って,リスト内で 3 より大きい要素を選び出す.
Wolfram言語には判定を行う関数がたくさんある.
数学や他のプログラミング言語の慣例に従って,
Wolfram言語でのこれらの関数の名前は通常最後に「Q」が付く.
例えば EvenQ 関数は数が偶数であるかどうかを判定し,
PrimeQ 関数は数が素数であるかどうかを判定する.
例えばこれは Select 関数を使ってリストから偶数を取り出す.
and や or 等の論理演算子を判定式と組み合せて使うこともできる.
論理積 and 演算は,この例のように & 記号2つで入力する.
2+2 は偶数かつ 3 より大きいので True が返される.
論理和 or 演算は縦棒2本で入力する.
この例では,5 は偶数または 4 より大きい数なので,True が返される.
論理否定 not 演算は感嘆符に続いて等号を入力する.
例えばこの判定式では,引数が偶数でも 4 より大きくもない場合に True が返される.
等号の前に感嘆符を置いても,
引数が偶数でも 4 より大きくもない場合に True が返される.
感嘆符の not 演算が EvenQ 判定式だけでなく,
確実に判定式全体に適用されるようにするために,
ここにカッコを挿入した.
入力の意味が曖昧なら,明確にするためにカッコを入れて損はない.
ここで純関数が使える.
例えば Select 関数で偶数でも 4 より大きくもない要素を取り出す.
Wolfram言語には,さまざまな判定を行う関数がたくさんある.
例えば IntegerQ は整数であるかどうかを判定し,
LetterQ は文字列内のすべてが文字であるかどうかを判定する.
MemberQ という関数はリストの要素のメンバーかどうかを判定する.
この例では,5 はリスト {1,3,5,7} のメンバーであるので,True が返される.
ImageInstanceQ という関数もある.
MemberQがリストに対して作用するのに対し,ImageInstanceQ は画像に対して作用する.
これは,猫の画像だと判定すると True を返す ImageInstanceQ 関数の例である.
これが画像が猫の画像である場合に True を返す判定式で,
Select 関数の中で猫の画像を選び出す判定式を使用する.
これでセクション28のビデオでの例はおしまいである.
最後にこのセクションで使用した関数をまとめる.
Wolfram言語には判定を行う関数がたくさんあり,
If や Select のように判定関数を使う条件式もたくさんある.
このセクションではこれらの関数の使い方を簡単に紹介した.
Wolfram言語の判定と条件のための関数の
詳細情報をドキュメントで見るためには,
「ヘルプ」メニューから「Wolframドキュメントセンター」を選び,
現れたドキュメントセンターで「Conditionals」を検索し,
条件式のガイドページを選ぶと
If や Select,その他の条件式へのリンクを含むページが現れる.
このページには判定式というページのリンクもあり,
ここにはこのセクションで出てきた判定式や,
And や Or 等の演算へのリンクがすべて含まれている.
最後にセクション28の練習問題がある.
練習問題28.2を見てみよう.
「100までの数で桁数字の和が5未満の数のリストを求めなさい.」
Range を使って 100 までの数のリストを作り,
Select でリストの中からこの練習問題に適した数を選び出す.
各桁の数字を足すと 5 未満になるときに True を返す判定式が必要である.
まずこの判定式を構築する.
IntegerDigits 関数は数の各桁の数字を返す.
例えばこれは数 31 の各桁の数字を与える.
Total 関数を使ってこれらの数字を足す.
最後に合計が 5 未満の場合に True を返す判定式である.
これを純関数に変え,
31 だけでなく,どのような数でも判定できるようにしてみよう.
31 を番号記号で置き換え,純関数のスロットにする.
最後に&記号を置いて,これが純関数であることをシステムに伝える.
これで各桁の数字を足すと 5 未満になる数に対して True を,
それ以外は False を返す判定式ができた.
最後に Select と Range[100] を使い,希望の要素を取り出す判定式を挿入すると,
解が得られる.
通常,このような論理判定と条件式を使ったタスクは,
目的のものを得るために
基本的なツールをどのように組み立てるのかを系統立てて考える必要がある.
練習あるのみなので,練習問題をぜひ試していただきたい.