2009年7月5日日曜日

【LPN】4 Lists

リストになると俄然元気になる。

* 4 Lists
** 1 Lists
- リストだ!
- |はa special built-in operator。listsを分解する。
- |はUnificationとともに使える。
- variablesはunificationにてlistsもinstantiateで
きる。
- []はa special list。|で分解できない。
- 全てのlistsは、|の観点でいうと、[]で終端されてい
る。
- the anonymous variableは埋め草。
- そのbindingsは全て個別。
** 2 Member
- termsじゃなくてobjectsと言う表現がここで出始めて
いる。ここまでで言うと、terms + lists = objects
ということかな?
** 3 Recursing down Lists
- 入力にvariablesが使えるところがPrologの際立つと
ころ。
** 4 Exercise
- Exercise 4.1.
- 1. [a,b,c,d] = [a,[b,c,d]].
fail.
- 2. [a,b,c,d] = [a|[b,c,d]].
true.
- 3. [a,b,c,d] = [a,b,[c,d]].
fail.
- 4. [a,b,c,d] = [a,b|[c,d]].
true.
- 5. [a,b,c,d] = [a,b,c,[d]].
true.
- 6. [a,b,c,d] = [a,b,c|[d]].
true.
- 7. [a,b,c,d] = [a,b,c,d,[]].
fail.
- 8. [a,b,c,d] = [a,b,c,d|[]].
true.
- 9. [] = _.
true.
- 10. [] = [_].
fail.
- 11. [] = [_|[]].
fail.
- Exercise 4.2.
- 1. [1|[2,3,4]]
correct. 4 elements.
- 2. [1,2,3|[]]
correct. 3 elements.
- 3. [1|2,3,4]
incorrect.
- 4. [1|[2|[3|[4]]]]
correct. 4 elements.
- 5. [1,2,3,4|[]]
correct. 4 elements.
- 6. [[]|[]]
correct. 1 elements.
- 7. [[1,2]|4]
incorrect.
- 8. [[1,2],[3,4]|[5,6,7]]
correct. 5 elements.
- Exercise 4.3.
second(X,[_,X|_]).

すごくコンパクトな述語定義だ。Prologのパワー。

- Exercise 4.4.
swap12([X,Y|T],[Y,X|T]).

うーん。気持ちいい。

- Exercise 4.5.
listtran([],[]).
listtran([G|GT],[E|ET]) :-
tran(G,E),
listtran(GT,ET).

慣れてきた。
- Exercise 4.6.
twice([],[]).
twice([X|T1],[X,X|T2]) :- twice(T1,T2).

- Exercise 4.7.
割愛。
** 5 Practical Session

combine1([],[],[]).
combine1([H1|T1],[H2|T2],[H1,H2|T3]) :-
combine1(T1,T2,T3).

combine2([],[],[]).
combine2([H1|T1],[H2|T2],[[H1,H2]|T3]) :-
combine2(T1,T2,T3).

combine3([],[],[]).
combine3([H1|T1],[H2|T2],[j(H1,H2)|T3]) :-
combine3(T1,T2,T3).

こつこつ。

0 件のコメント: