Friday 17 September 2010

久しぶりのProlog

何故か、この前、install した、SICStus Prolog 4.1 が入ってます。Prolog は学習コストが高すぎるので、生産性は確かに高いとは思うが、学生に教えるのはちょっとね。研究室の道具としても。

ソフトウェア科学会では、珍しく Prolog の発表を見ました。ポスターセッションだったけど。いや、普通の発表でも「実装は Prolog 」ってのがあったな。そういえば、IC の投稿にも Prolog 使ったものがあった。しぶとく生き残っているな〜

SFCの人がやっている、無名述語とか言うもので、

 ?-call([X,X],V,1).
V=1
yes

とかなるものらしい。わかる人には、これで全部らしいです。call しないと意味ないのだが、実装を見てわかりました。

  maplist(binary_term(=), [1,2], [3,4], G),

みたいなのを多用している。これは、

 binary_term(=,1,3,G1),binary_term(=,2,4,G2),G=[G1,G2],

みたいに動いてくれるわけらしい。このために述語をたくさん書くのもあれなので、導入されたものみたい。

maplistは、

 maplist(G,L0,L1,L2) :- maplist_(L0,L1,L2,G).
 maplist_([],_,_,_) .
 maplist_([H0|T0],[H1|T1],[H2|T2],G) :-
   call(G,H0,H1,H2),
   maplist(T0,T1,T2,G).

とか簡単なんですが、SWI-Prolog では標準装備らしいです。

で、SICStus Prolog で動かすには、このあたり全部書かないといけないらしい。gensym がないとかは、昔から慣れているので問題ないんですが、結構、書くはめに。

簡単な例題は動いたけど、まだ、動いてない部分があるみたい。ま、良いか。Prolog 忘れないための練習みたいなものなので。

でも、この研究って、80年代なら理解できるんだけど、いまやることかな? まぁ、面白いなら良いか。

No comments: