※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。リストについてPrologではリストを使えば、不定個の要素に構造を持たせて、色々な処理を実装することができます。・・・数字のリストリストは、入れ子も可能です。[[項1],項2,[項3,項4]]リストの分解リストは|(縦棒)を使用し、頭部と尾部に分ける事ができます。[c,d]リストを使ってみようリストの要素をすべて出力test:-L=[1,2,3,4,5],func(L).func([]):-!.func([A|L]):-write(A),nl,func(L).?-test.12345yes解説test述語では、Lという変数に[1,2,3,4,5]のリストをユニフィケーションし、Lという変数をfunc述語にアリティとして渡してます。func述語は2つ定義しました。一つ目の「func([])]は終了条件になります。[]は空リストと呼ばれ、要素がないリストです。尾部を、func述語に渡し、再帰処理をしてます。func述語では要素がある限り、2つ目の述語が実行され、要素が空になる(空リストになる)と再帰処理を終了してます。回帰のイメージ回帰は一周して元に戻る再帰のイメージ再帰もグルっと回って元に戻ってくるが、戻ってきた時に決まってなかった値(変数など)が決まって元に戻る。黒丸のところに何らかかのプログラムを記述する。リストのコピーtest:-L=[1,2,3,4,5],func(L,M),write(M).func([],[]):-!.func([A|L],[A|S]):-func(L,S).?-test.[1,2,3,4,5]yes解説test述語では、Lという変数に[1,2,3,4,5]のリストをユニフィケーションし、Lという変数をfunc述語に第一アリティとして渡してます。func述語の第二アリティはLのリストがコピーされた値がMにユニフィケーションされ、write述語でMを出力してます。func述語は2つ定義してます。一つ目の「func([],[])]は、先ほどと同様に終了条件になります。2つ目のfunc述語では、渡されたリストの頭部と尾部を分解し、頭部を第二アリティのリストの先頭へ追加してます。尾部は、func述語の第一アリティへ、また欲しい答えを第二アリティへ渡し、再帰処理を行ってます。※ここではまだ第二アリティの値は未知。第一アリティの要素がある限り、2つ目のfunc述語が実行され、都度、第二アリティの先頭へ追加し、第一アリティが空リストになれば、第二アリティも空であると定義された一つ目のfunc述語が実行され、終了します。N-1,func(X).解説test述語では、Nという変数に10を数値をユニフィケーションし、Nという変数をfunc述語に第一アリティとして渡してます。func述語は2つ定義してます。一つ目の「func(0]はNの値が0の場合、終了する条件です。※Prologで、述語を定義する場合、この終了条件を定義する意識をもつ必要があります。2つ目のfunc述語では、write述語で、HELLOという文字列を出力し、Nから1をマイナス後にfunc述語へ渡してます。Nの値が0になるまで、「HELLO]を出力してます。まとめ今回は以下の事を学習しました。プライバシーポリシー。