#include int main(int argc, char **argv) { int nb = atoi(argv[1]); int i, j; FILE *fp; if ((fp = fopen("block.al", "w")) == NULL) { printf("Cannot open file to write\n"); exit(0); } // nb blocks // fluents fprintf(fp, "fluent emptyHand;\n", i); for (i = 0; i < nb; i ++) { fprintf(fp, "fluent clear(%d);\n", i); fprintf(fp, "fluent onTable(%d);\n", i); fprintf(fp, "fluent holding(%d);\n", i); } for (i = 0; i < nb; i ++) { for (j = 0; j < nb; j ++) { if (j != i) fprintf(fp, "fluent on(%d,%d);\n", i, j); } } fprintf(fp, "fluent handEmpty;\n"); fprintf(fp, "\n\n"); // actions for (i = 0; i < nb; i ++) { fprintf(fp, "action pickup(%d);\n", i); fprintf(fp, "action putdown(%d);\n", i); } for (i = 0; i < nb; i ++) { for (j = 0; j < nb; j ++) { if (j != i) { fprintf(fp, "action unstack(%d,%d);\n", i,j); fprintf(fp, "action stack(%d,%d);\n", i,j); } } } fprintf(fp, "\n\n"); // executable condition // pick up an put down for (i = 0; i < nb; i ++) { fprintf(fp, "executable pickup(%d) if emptyHand, onTable(%d), clear(%d);\n", i, i, i); fprintf(fp, "executable putdown(%d) if holding(%d);\n", i, i); } // stack and unstack for (i = 0; i < nb; i ++) { for (j = 0; j < nb; j ++) { if (j != i) { fprintf(fp, "executable unstack(%d,%d) if emptyHand, clear(%d), on(%d, %d);\n", i,j,i,i,j); fprintf(fp, "executable stack(%d,%d) if holding(%d), clear(%d);\n", i,j, i, j); } } } fprintf(fp, "\n\n"); // effects // pick up an put down for (i = 0; i < nb; i ++) { fprintf(fp, "pickup(%d) causes holding(%d), -emptyHand, -onTable(%d), -clear(%d);\n", i, i, i,i ); fprintf(fp, "putdown(%d) causes -holding(%d), emptyHand, clear(%d), onTable(%d);\n", i, i, i, i); } // stack and unstack for (i = 0; i < nb; i ++) { for (j = 0; j < nb; j ++) { if (j != i) { fprintf(fp, "unstack(%d,%d) causes holding(%d), -emptyHand, -clear(%d), -on(%d, %d), clear(%d);\n", i,j,i,i,i,j,j); fprintf(fp, "stack(%d,%d) causes -holding(%d), -clear(%d), clear(%d), emptyHand, on(%d,%d);\n", i,j, i, j,i, i, j); } } } fprintf(fp, "\n\n"); // initial state for (i = 0; i < nb-1; i ++) { fprintf(fp, "initially on(%d,%d);\n", i, i+1); } fprintf(fp, "initially clear(0);\n"); fprintf(fp, "initially emptyHand;\n"); fprintf(fp, "initially onTable(%d);\n", nb-1); fprintf(fp, "\n\n"); // Goal for (i = nb - 1; i > 0; i --) { fprintf(fp, "goal on(%d,%d);\n", i, i-1); } fclose(fp); }