±ÀÂ_ªº¹Lµ{

«e­¶ ¥Ø¿ý ¤U­¶

·§­n ¤@­P¤Æ ¦^¯Á ¨Ò¤l

·§­n Top

¦b±ÀÂ_ªº¹Lµ{¤¤¡]¦^µª¬d¸ß©ÎÀ˯Á¥H¹F¦¨¥Ø¼Ð¡^¡AProlog ¸ÑÄÀµ{§Ç°µ¨Ç¤°»ò¡H

  1. ¤@­Ó Prolog µ{§Ç·|³Q¬d¾\¡Aµ{§Ç¤¤ªº¨Æ¹ê©M³W«h³Q¸ü¤Jª¾ÃѼƾڮw¡C

  2. ·í¦³¤F¬d¸ß©Î¥Ø¼Ð«á¡AProlog ¸ÑÄÀµ{§Ç±q¤W¦Ü¤U·j´Mª¾ÃѼƾڮw¡A¬Ý¬Ý¦³¨S¦³¨Æ¹ê©Î³W«h¥i¥H©M¬d¸ß©Î¥Ø¼Ð¬Û°t¦X¡C

  3. ¦pªG¦³°t¦Xªº±¡ªp¡AProlog ¸ÑÄÀµ{§Ç¦¨¥\¦a¬°¬d¸ß§ä¥Xµª®×¡A©Î±oª¾¥Ø¼Ð¬O¯uªº¡F¥ô¦óÅܶqªº­È¤]¦b³o®É­Ô³Q¨D¥X¤F¡C

  4. ¦pªG¨Ï¥ÎªÌ­n¨D§ó¦h¸Ñ¡]¨Ò¦p¦b³¡¥÷ Prolog ¸ÑÄÀµ{§Ç¿é¤J¤F¤À¸¹¡^¡AProlog ¸ÑÄÀµ{§Ç·|Ä~Äò·j´M¡C¥¦·|°OµÛ­þ¨Ç¨Æ¹ê©M³W«h³Q·j´M¹L¡C·í¥¦¦A§ä¤£¨ì§ó¦h¸Ñªº®É­Ô¡A¥¦·|¿é¥X¡uno¡v¡A¨Ã¥B·j´Mµ²§ô¡C

²Ä¤G¨B¸ÔºÉªº¸ÑÄÀ

Prolog ¸ÑÄÀµ{§Ç±q¥Ø¼Ð¡þ¬d¸ß¶}©l¡A¸òµÛ¤@ª½¦V«á¦^¯Á¡A¦bª¾ÃѼƾڮw¤¤§ä¥X¥i¥H±ÀÂ_¨ì¥Ø¼Ð¨Æ¹ê©M³W«h¡C§A¥i¥H¦b¤U­±ªº¨Ò¤l¤¤¬Ý¨£±ÀÂ_ªº¹Lµ{¡C

¤@­P¤Æ Top

¤@­P¤Æ§Y¬O³z¹L¬ù§ôÅܶqªº¤èªk¡A¦b¤w¦³ªº³W«h¤¤¤Þ¦ù¥X¥X·sªº³W«h¡C

¬°¤F­n°t¦X¨ì¥Ø¼Ð©Î¬d¸ß¡A¥ô¦ó¹J¨£ªºÅܶq³£·|¥H«ê·íªº±`¼Æ¥N¤J¥h¡]ºÙ¬°¬ù§ô¡^¡C

¦^¯Á Top

¦³¨Ç®É­Ô¡A¦h©ó¤@­Ó¨Æ¹ê¡þ³W«h¥i¥HÀ³¥Î©ó¤@­Ó¥Ø¼Ð¡þ¬d¸ß¡A³o®É­Ô¦bª¾ÃѼƾڮw¤¤³Ì¥ý¥X²{ªº¨Æ¹ê¡þ³W«h·|³QÀ³¥Î¡A¦Ó¨ä¥Lªº¨Æ¹ê¡þ³W«h¿ð¨Ç¤]·|³QÀ³¥Î¡A¨Ï§Ú­Ì¥i¥H§ä¨ì©Ò¦³¥i¯àªº¸Ñ¡C³o¹Lµ{ºÙ¬°¦^¯Á¡C

¨Ò¤l Top

§Ú­Ì·|¨Ï¥Î¥H¤Uµ{§Ç©M¤@¨Ç¬d¸ß¥h¸ÑÄÀ±ÀÂ_ªº¹Lµ{¡C

¯d·N¡J±ÀÂ_¹Lµ{¤¤ªº¨C¤@¨B¤¤¡A¥i¯à·|¦³¦h©ó¤@­Ó¤l¥Ø¼Ð³Q³B²z¡C¦b³o±¡ªp¤U¡A¥u¦³²Ä¤@­Ó¤l¥Ø¼Ð³Q¦Ò¼{¡A¦pªG¦³¤@­Ó³W«h¥i³QÀ³¥Î¡A¥¦·|³QÀ³¥Î¤Fªº³W«h·í¤¤ªº¤l¥Ø¼Ð¨ú½l¡F¦pªG²Å¦X¤F¤@­Ó¨Æ¹ê¡A¥¦·|³Q§R¥h¡C¦pªG¨S¦³³W«h©Î¨Æ¹ê¥i³QÀ³¥Î¡A§Ú­Ì»Ý­n¦^¯Á¡C

µ{§Ç¥|¡J¤@­ÓÃö©ó¤@¨Ç¹q¸£¡B¦w¸Ë¤Fªº³n¥ó¥H¤Î¹q¸£ªº¨Ï¥ÎªÌ
spec(comp1, pc, 32).                                      /* ¨Æ¹ê¤@ */
spec(comp2, mac, 128).                                    /* ¨Æ¹ê¤G */
spec(comp3, pc, 64).                                      /* ¨Æ¹ê¤T */
runs(pc, movie_edit, 96).                                 /* ¨Æ¹ê¥| */
runs(pc, vb, 16).                                         /* ¨Æ¹ê¤­ */
runs(pc, cpp, 28).                                        /* ¨Æ¹ê¤» */
runs(mac, vb, 24).                                        /* ¨Æ¹ê¤C */
runs(mac, prolog, 128).                                   /* ¨Æ¹ê¤K */
access(judy, comp1).                                      /* ¨Æ¹ê¤E */
access(peter, comp3).                                     /* ¨Æ¹ê¤Q */
access(david, comp1).                                     /* ¨Æ¹ê¤Q¤@ */
access(david, comp2).                                     /* ¨Æ¹ê¤Q¤G */

can_use(P, SW) :- access(P, Comp), can_run(Comp, SW).     /* ³W«h¤@ */

can_run(Comp, SW) :- spec(Comp, CompType, MemAvail),
                     runs(CompType, SW, MemNeeded),
                     MemAvail >= MemNeeded.               /* ³W«h¤G */

Judy ¥i¥H¨Ï¥Î VB ¶Ü¡H
?- can_use(judy, vb).

¼h¦¸ ±ÀÂ_ªºµ²ªG À³¥Î¤Fªº¨Æ¹ê©Î³W«h ¬ù§ôÅܶq
­ì¨Óªº¥Ø¼Ð can_use(judy, vb).
¬°¤F¨Ï­ì¨Óªº¥Ø¼Ð¡]can_use(judy, vb)¡^¦¨¬°¯uªº¡A®Ú¾Ú³W«h¤@¡A ³W«h¤¤ªº±ø¥ó¥²¶·¬O¯uªº¡]§Y¹ï©ó¬Y¨Ç Comp¡A access(judy, Comp) ©M can_run(Comp, vb)¡^¡C¦]¦¹¥Ø¼Ð¥i³Q²¤Æ¦¨¥H¤U©Ò¨£¡C

¬°¤F¨Ï¥Î³W«h¤@©ó¥Ø¼Ð¤§¤W¡A§Ú­Ì°µ¤F¤@¦¸¤@­P¤Æ¡A°µªk¬O¬ù§ô¡]§Y½á­È¡^ judy ³o­Ó­È©óÅܶq P¡A¥H¤Î¬ù§ô­È vb ©óÅܶq SW¡C

³W«h¤@

P = judy
SW
= vb
1 access(judy, Comp), can_run(Comp, vb).
¤@­P¤Æ«á¡A¥Ñ¨Æ¹ê¤E±oª¾ access(judy, comp1)¬O¯uªº¡C¦]¦¹¡A­ì¨Óªº¥Ø¼Ð¬O§_¯uªº¡A¥u¨ú¨M©ó can_run(comp1, vb) ¬O§_¯uªº¡C

¨Æ¹ê¤E

Comp = comp1
2 can_run(comp1, vb).

¨Æ¹ê¤G

-

3 spec(comp1, CompType, MemAvail),
runs(
CompType, vb, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤@

CompType = pc
MemAvail
= 32
4 runs(pc, vb, MemNeeded),
32 >=
MemNeeded.

¨Æ¹ê¤­

MemNeeded = 16
5 32 >=16.
¥H¤W¬O¯uªº¡A¦]¦¹§Ú­Ì¥i¥H±ÀÂ_²Ä 4 ¼h¤¤ªº¤l¥Ø¼Ð¬O¯uªº¡C¦Ó¨Ì¾Ú¦P¤@¹D²z±oª¾²Ä 3 ¼h¡B²Ä 2 ¼h¡B²Ä 1 ¼h¤Î­ì¨Óªº¥Ø¼Ð³£¬O¯uªº¡C
²Å¦X¤F¡I
¿é¥X¡Jyes
¾ãÅé¿é¥X yes

David ¥i¥H¨Ï¥Î Prolog ¶Ü¡H
?- can_use(david, prolog).

¦¹¥Ø¼Ð¥Ü½d¦^¯Á¡C

¼h¦¸ ±ÀÂ_ªºµ²ªG À³¥Î¤Fªº¨Æ¹ê©Î³W«h ¬ù§ôÅܶq
­ì¨Óªº¥Ø¼Ð can_use(david, prolog).

³W«h¤@

P = david
SW
= prolog
1 access(david, Comp), can_run(Comp, prolog).
¨Æ¹ê¤Q¤@¤Î¨Æ¹ê¤Q¤G³£¥i¥HÀ³¥Î¡A¦ý¦]¬°¨Æ¹ê¤Q¤@¦b¨Æ¹ê¤Q¤G¤§«e¡A¦]¦¹¨Æ¹ê¤Q¤@·|¥ý³QÀ³¥Î¡C

¨Æ¹ê¤Q¤@

Comp = comp1
2 can_run(comp1, prolog).

³W«h¤G

-

3 spec(comp1, CompType, MemAvail),
runs(
CompType, prolog, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤@

CompType = pc
MemAvail
= 32
4 runs(pc, prolog, MemNeeded),
32 >= MemNeeded.
¨S¦³³W«h©Î¨Æ¹ê¥i¥H¦A¨Ï¥Î¡A¦]¦¹»Ý­n¦^¯Á¡C
¥¢±Ñ¤F¡I¦^¯Á¡C
3 spec(comp1, CompType, MemAvail),
runs(CompType, prolog, MemNeeded),
MemAvail >= MemNeeded.
¨S¦³¥¼³QÀ³¥Î¹Lªº³W«h©Î¨Æ¹ê¥i¥H¦b³oùبϥΡA¦]¦¹»Ý­n¦^¯Á¡C
¥¢±Ñ¤F¡I¦^¯Á¡C
2 can_run(comp1, prolog). ¥¢±Ñ¤F¡I¦^¯Á¡C
1 access(david, Comp), can_run(Comp, prolog).
¨Æ¹ê¤Q¤@¤w³Q¨Ï¥Î¹L¡A²{¦b§Ú­Ì¸Õ¸Õ¨Æ¹ê¤Q¤G¡C

¨Æ¹ê¤Q¤G

Comp = comp2
2 can_run(comp2, prolog).

³W«h¤G

-

3 spec(comp2, CompType, MemAvail),
runs(
CompType, prolog, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤G

CompType = mac
MemAvail
= 128
4 runs(mac, prolog, MemNeeded),
128 >=
MemNeeded.

¨Æ¹ê¤K

MemNeeded = 128
5 128 >= 128. ²Å¦X¤F¡I
¿é¥X¡Jyes
¾ãÅé¿é¥X yes

Judy ¥i¥H¨Ï¥Î¤°»ò³n¥ó¡H
?- can_use(judy, X).

³o¬d¸ß¥Ü½d«ç¼Ë¦^¯Á¥h§ä´M©Ò¦³µª®×¡C

¼h¦¸ ±ÀÂ_ªºµ²ªG À³¥Î¤Fªº¨Æ¹ê©Î³W«h ¬ù§ôÅܶq
­ì¨Óªº¬d¸ß can_use(judy, X).

³W«h¤@

P = judy
1 access(judy, Comp), can_run(Comp, X).

¨Æ¹ê¤Q¤@

Comp = comp1
2 can_run(comp1, X).

³W«h¤G

-

3 spec(comp1, CompType, MemAvail),
runs(
CompType, X, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤@

CompType = pc
MemAvail
= 32
4 runs(pc, X, MemNeeded),
32 >=
MemNeeded.
¨Æ¹ê¥| X = movie_edit
MemNeeded
= 96
5 32 >= 96.

¥¢±Ñ¤F¡I¦^¯Á¡C

4 runs(pc, X, MemNeeded),
32 >=
MemNeeded.
¨Æ¹ê¤­ X = vb
MemNeeded
= 16
5 32 >= 16.
X = vb ¬O­ì¨Ó¬d¸ßªº¤@­Ó¸Ñ¡C

¦^¯Á¬O»Ý­nªº¡A¦]¬°¥i¯àÁÙ¦³¨ä¥Lªº¸Ñ¡C

²Å¦X¤F¡I
¿é¥X¡JX = vb
µM«á¦^¯Á¡C

4 runs(pc, X, MemNeeded),
32 >=
MemNeeded.
¨Æ¹ê¤» X = cpp
MemNeeded
= 28
5 32 >= 28. ²Å¦X¤F¡I
¿é¥X¡JX = cpp
µM«á¦^¯Á¡C
4 runs(pc, X, MemNeeded),
32 >= MemNeeded.
¥¢±Ñ¤F¡I¦^¯Á¡C
3 spec(comp1, CompType, MemAvail),
runs(CompType, X, MemNeeded),
MemAvail >= MemNeeded.
¥¢±Ñ¤F¡I¦^¯Á¡C
2 can_run(comp1, X). ¥¢±Ñ¤F¡I¦^¯Á¡C
1 access(judy, Comp), can_run(Comp, X). ¥¢±Ñ¤F¡I¦^¯Á¡C
­ì¨Óªº¬d¸ß can_use(judy, X). ¥¢±Ñ¤F¡I
¥Ñ©ó¤w¦^¨Ó¨ì³Ì³»¼h¡A¦]¦¹©Ò¦³µª®×¤w¸g³Q§ä¥X¨Ó¤F¡C
¾ãÅé¿é¥X x = vb
x = cpp

½Ö¥i¥H¨Ï¥Î MovieEdit¡H
?- can_use(X, movie_edit).

§Ú­Ì¤@©w­n¦^¯Á¤~¥i¥HªÖ©w¤@­Ó¬d¸ß¨S¦³µª®×¡C

¼h¦¸ ±ÀÂ_ªºµ²ªG À³¥Î¤Fªº¨Æ¹ê©Î³W«h ¬ù§ôÅܶq
­ì¨Óªº¬d¸ß can_use(X, movie_edit).

³W«h¤@

SW = movie_edit
1 access(X, Comp), can_run(Comp, movie_edit).

¨Æ¹ê¤E

X = judy
Comp
= comp1
2 can_run(comp1, movie_edit).

³W«h¤G

-

3 spec(comp1, CompType, MemAvail),
runs(
CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤@

CompType = pc
MemAvail
= 32
4 runs(pc, movie_edit, MemNeeded),
32 >=
MemNeeded.
¨Æ¹ê¥| MemNeeded = 96
5 32 >= 96. ¥¢±Ñ¤F¡I¦^¯Á¡C
4 runs(pc, movie_edit, MemNeeded),
32 >=MemNeeded.
¥¢±Ñ¤F¡I¦^¯Á¡C
3 spec(comp1, CompType, MemAvail),
runs(CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¥¢±Ñ¤F¡I¦^¯Á¡C

2 can_run(comp1, movie_edit).

¥¢±Ñ¤F¡I¦^¯Á¡C

1 access(X, Comp), can_run(Comp, movie_edit).

¨Æ¹ê¤Q

X = peter
Comp
= comp3
2 can_run(comp3, movie_edit).

³W«h¤G

-

3 spec(comp3, CompType, MemAvail),
runs(
CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤T

CompType = pc
MemAvail
= 64
4 runs(pc, movie_edit, MemNeeded),
64 >=
MemNeeded.
¨Æ¹ê¥| MemNeeded = 96
5 64 >= 96.

¥¢±Ñ¤F¡I¦^¯Á¡C

4 runs(pc, movie_edit, MemNeeded),
64 >=MemNeeded.
¥¢±Ñ¤F¡I¦^¯Á¡C
3 spec(comp3, CompType, MemAvail),
runs(CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.
¥¢±Ñ¤F¡I¦^¯Á¡C
2 can_run(comp3, movie_edit). ¥¢±Ñ¤F¡I¦^¯Á¡C
1 access(X, Comp), can_run(Comp, movie_edit).

¨Æ¹ê¤Q¤@

X = david
Comp
= comp1
2 can_run(comp1, movie_edit).

³W«h¤G

-

3 spec(comp1, CompType, MemAvail),
runs(
CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤@

CompType = pc
MemAvail
= 32
4 runs(pc, movie_edit, MemNeeded),
32 >=
MemNeeded.
¨Æ¹ê¥| MemNeeded = 96
5 32 >= 96.

¥¢±Ñ¤F¡I¦^¯Á¡C

4 runs(pc, movie_edit, MemNeeded),
32 >=MemNeeded.

¥¢±Ñ¤F¡I¦^¯Á¡C

3 spec(comp1, CompType, MemAvail),
runs(CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¥¢±Ñ¤F¡I¦^¯Á¡C

2 can_run(comp1, movie_edit).

¥¢±Ñ¤F¡I¦^¯Á¡C

1 access(X, Comp), can_run(Comp, movie_edit).

¨Æ¹ê¤Q¤G

X = david
Comp
= comp2
2 can_run(comp2, movie_edit).

³W«h¤G

-

3 spec(comp2, CompType, MemAvail),
runs(
CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¨Æ¹ê¤G

CompType = mac
MemAvail
= 128
4 runs(mac, movie_edit, MemNeeded),
128 >= MemNeeded.

¥¢±Ñ¤F¡I¦^¯Á¡C

3 spec(comp2, CompType, MemAvail),
runs(CompType, movie_edit, MemNeeded),
MemAvail >= MemNeeded.

¥¢±Ñ¤F¡I¦^¯Á¡C

2 can_run(comp2, movie_edit).

¥¢±Ñ¤F¡I¦^¯Á¡C

1 access(X, Comp), can_run(Comp, movie_edit).

¥¢±Ñ¤F¡I¦^¯Á¡C

­ì¨Óªº¬d¸ß can_use(X, movie_edit). ¥¢±Ñ¤F¡C¤w¨ì¤F³Ì³»¼h¡A¦ý¨S§ä¨ìµª®×¡C
¿é¥X¡Jno
¾ãÅé¿é¥X no

«e­¶ ¥Ø¿ý ¤U­¶