リストと繰り返しのつづき
繰り返し
repeatを使った繰り返し。repeatは、自分までバックトラックが達したら再度repeatの次からやり直させる演算子。入力をうけとり、そのまま返したいなら次のようにする。
my_echo :- repeat, get_char(user_input, C), put_char(user_output, C), C == end_of_file, !.
入力を最後まで読み飛ばす場合はこれ。
my_echo :- repeat, get_char(user_input, end_of_file), !.
終了条件が後にくるので、repeatはdo-whileのループと同じような感覚で利用できる。
差分リスト
リストの[Head | Tail]のTailが自由変数のリストを差分リストと言うらしい。
| ?- [a,b,c|X] = [a,b,c,d]. X = [d] yes | ?- R = [a,b,c|X], X = [c,e | Y]. R = [a,b,c|X], X = [c,e | Y]. R = [a,b,c,c,e|Y] X = [c,e|Y] yes | ?- R = [a,b,c|X], X = [c,e | Y], Y = [f, g]. R = [a,b,c|X], X = [c,e | Y], Y = [f, g]. R = [a,b,c,c,e,f,g] X = [c,e,f,g] Y = [f,g] yes | ?-
リストの途中にいきなり連結できる。