predicates writeStatusMessage(integer). status(integer). positive(symbol). negative(symbol). rule(symbol,symbol). rule(symbol). request. clauses positive(''). positive('y'). positive('Y'). positive('yes'). positive('Yes'). positive('YES'). negative('n'). negative('N'). negative('no'). negative('No'). negative('NO'). request:- clearwindow, write('This expert system helps you to determine '), write('status code of your HTTP request. Please, '), write('answer the following questions[Y/n]:'),nl, rule(b12). rule(b12):-write('Service available?'),nl,readln(X),rule(b12,X). rule(b11):-write('URI too long?'),nl,readln(X),rule(b11,X). rule(b10):-write('Malformed?'),nl,readln(X),rule(b10,X). rule(b9):-write('Authorized?'),nl,readln(X),rule(b9,X). rule(b8):-write('Forbidden?'),nl,readln(X),rule(b8,X). rule(b7):-write('Unknown or unsupported Content-* header?'),nl,readln(X),rule(b7,X). rule(b6):-write('Unknown Content-Type?'),nl,readln(X),rule(b6,X). rule(b5):-write('Request entity too large?'),nl,readln(X),rule(b5,X). rule(b4):-write('OPTIONS?'),nl,readln(X),rule(b4,X). rule(b2):-write('DELETE,GET,HEAD,PUT,POST?'),nl,readln(X),rule(b2,X). rule(b1):-write('Known method?'),nl,readln(X),rule(b1,X). rule(c2):-write('Is method allow on this resource?'),nl,readln(X),rule(c2,X). rule(c3):-write('Accept exists?'),nl,readln(X),rule(c3,X). rule(c4):-write('Acceptable media type available?'),nl,readln(X),rule(c4,X). rule(d4):-write('Accept-Language exists?'),nl,readln(X),rule(d4,X). rule(d5):-write('Acceptable language exist?'),nl,readln(X),rule(d5,X). rule(e5):-write('Accept-Charset exist?'),nl,readln(X),rule(e5,X). rule(e6):-write('Acceptable charset available?'),nl,readln(X),rule(e6,X). rule(f6):-write('Accept-Encoding exists?'),nl,readln(X),rule(f6,X). rule(f7):-write('Acceptable encoding available?'),nl,readln(X),rule(f7,X). rule(g7):-write('Resource exists?'),nl,readln(X),rule(g7,X). rule(g8):-write('If-Match exists?'),nl,readln(X),rule(g8,X). rule(g9):-write('If-Match: * exists?'),nl,readln(X),rule(g9,X). rule(g11):-write('Etag in If-Match?'),nl,readln(X),rule(g11,X). rule(h10):-write('If-Unmodified-Since exists?'),nl,readln(X),rule(h10,X). rule(h11):-write('If-Unmodified-Since is valid date?'),nl,readln(X),rule(h11,X). rule(h12):-write('Last-Modified > If-Unmodified-Since?'),nl,readln(X),rule(h12,X). rule(i12):-write('If-None-Match exists?'),nl,readln(X),rule(i12,X). rule(i13):-write('If-None-Match: * exists?'),nl,readln(X),rule(i13,X). rule(j18):-write('GET/HEAD?'),nl,readln(X),rule(j18,X). rule(k13):-write('Etag in If-None-Match?'),nl,readln(X),rule(k13,X). rule(l13):-write('If-Modified-Since exists?'),nl,readln(X),rule(l13,X). rule(l14):-write('If-Modified-Since is valid date?'),nl,readln(X),rule(l14,X). rule(l15):-write('If-Modified-Since > Now?'),nl,readln(X),rule(l15,X). rule(l17):-write('Last-Modified > If-Modified-Since?'),nl,readln(X),rule(l17,X). rule(m16):-write('DELETE?'),nl,readln(X),rule(m16,X). rule(m20):-write('Delete enacted?'),nl,readln(X),rule(m20,X). rule(o20):-write('Response includes an entity?'),nl,readln(X),rule(o20,X). rule(o18):-write('Multiple representations?'),nl,readln(X),rule(o18,X). rule(n16):-write('POST?'),nl,readln(X),rule(n16,X). rule(n11):-write('Redirect?'),nl,readln(X),rule(n11,X). rule(o16):-write('PUT?'),nl,readln(X),rule(o16,X). rule(o14):-write('Conflict?'),nl,readln(X),rule(o14,X). rule(p11):-write('New resource?'),nl,readln(X),rule(p11,X). rule(h7):-write('If-None-Match: * exists?'),nl,readln(X),rule(h7,X). rule(i7):-write('PUT?'),nl,readln(X),rule(i7,X). rule(i4):-write('Server desires that the request be applied to a different URI?'),nl,readln(X),rule(i4,X). rule(p3):-write('Conflict?'),nl,readln(X),rule(p3,X). rule(k7):-write('Resource previously existed?'),nl,readln(X),rule(k7,X). rule(l7):-write('POST?'),nl,readln(X),rule(l7,X). rule(m7):-write('Server permits POST to missing resource?'),nl,readln(X),rule(m7,X). rule(k5):-write('Resource moved permanently?'),nl,readln(X),rule(k5,X). rule(l5):-write('Resource moved temporarily?'),nl,readln(X),rule(l5,X). rule(m5):-write('POST?'),nl,readln(X),rule(m5,X). rule(n5):-write('Server permits POST to missing resource?'),nl,readln(X),rule(n5,X). rule(b12,X):-positive(X),rule(b11). rule(b12,X):-negative(X),status(503). rule(b11,X):-positive(X),status(414). rule(b11,X):-negative(X),rule(b10). rule(b10,X):-positive(X),status(400). rule(b10,X):-negative(X),rule(b9). rule(b9,X):-positive(X),rule(b8). rule(b9,X):-negative(X),status(401). rule(b8,X):-positive(X),status(403). rule(b8,X):-negative(X),rule(b7). rule(b7,X):-positive(X),status(501). rule(b7,X):-negative(X),rule(b6). rule(b6,X):-positive(X),status(415). rule(b6,X):-negative(X),rule(b5). rule(b5,X):-positive(X),status(413). rule(b5,X):-negative(X),rule(b4). rule(b4,X):-positive(X),status(200). rule(b4,X):-negative(X),rule(b2). rule(b2,X):-positive(X),rule(c2). rule(b2,X):-negative(X),rule(b1). rule(b1,X):-positive(X),status(405). rule(b1,X):-negative(X),status(501). rule(c2,X):-positive(X),rule(c3). rule(c2,X):-negative(X),status(405). rule(c3,X):-positive(X),rule(c4). rule(c3,X):-negative(X),rule(d4). rule(c4,X):-positive(X),rule(d4). rule(c4,X):-negative(X),status(406). rule(d4,X):-positive(X),rule(d5). rule(d4,X):-negative(X),rule(e5). rule(d5,X):-positive(X),rule(e5). rule(d5,X):-negative(X),status(406). rule(e5,X):-positive(X),rule(e6). rule(e5,X):-negative(X),rule(f6). rule(e6,X):-positive(X),rule(f6). rule(e6,X):-negative(X),status(406). rule(f6,X):-positive(X),rule(f7). rule(f6,X):-negative(X),rule(g7). rule(f7,X):-positive(X),rule(g7). rule(f7,X):-negative(X),status(406). rule(g7,X):-positive(X),rule(h7). rule(g7,X):-negative(X),rule(g8). rule(g8,X):-positive(X),rule(g9). rule(g8,X):-negative(X),rule(h10). rule(g9,X):-positive(X),rule(h10). rule(g9,X):-negative(X),rule(g11). rule(g11,X):-positive(X),rule(h10). rule(g11,X):-negative(X),status(412). rule(h10,X):-positive(X),rule(h11). rule(h10,X):-negative(X),rule(i12). rule(h11,X):-positive(X),rule(h12). rule(h11,X):-negative(X),rule(i12). rule(h12,X):-positive(X),status(412). rule(h12,X):-negative(X),rule(i12). rule(i12,X):-positive(X),rule(i13). rule(i12,X):-negative(X),rule(l13). rule(i13,X):-positive(X),rule(j18). rule(i13,X):-negative(X),rule(k13). rule(j18,X):-positive(X),status(304). rule(j18,X):-negative(X),status(412). rule(k13,X):-positive(X),rule(j18). rule(k13,X):-negative(X),rule(l13). rule(l13,X):-positive(X),rule(l14). rule(l13,X):-negative(X),rule(m16). rule(l14,X):-positive(X),rule(l15). rule(l14,X):-negative(X),rule(m16). rule(l15,X):-positive(X),rule(m16). rule(l15,X):-negative(X),rule(l17). rule(l17,X):-positive(X),rule(m16). rule(l17,X):-negative(X),status(304). rule(m16,X):-positive(X),rule(m20). rule(m16,X):-negative(X),rule(n16). rule(m20,X):-positive(X),rule(o20). rule(m20,X):-negative(X),status(202). rule(o20,X):-positive(X),rule(o18). rule(o20,X):-negative(X),status(204). rule(o18,X):-positive(X),status(300). rule(o18,X):-negative(X),status(200). rule(n16,X):-positive(X),rule(n11). rule(n16,X):-negative(X),rule(o16). rule(n11,X):-positive(X),status(303). rule(n11,X):-negative(X),rule(p11). rule(o16,X):-positive(X),rule(o14). rule(o16,X):-negative(X),rule(o18). rule(o14,X):-positive(X),status(409). rule(o14,X):-negative(X),rule(p11). rule(p11,X):-positive(X),status(201). rule(p11,X):-negative(X),rule(o20). rule(h7,X):-positive(X),status(412). rule(h7,X):-negative(X),rule(i7). rule(i7,X):-positive(X),rule(i4). rule(i7,X):-negative(X),rule(k7). rule(i4,X):-positive(X),status(301). rule(i4,X):-negative(X),rule(p3). rule(p3,X):-positive(X),status(409). rule(p3,X):-negative(X),rule(p11). rule(k7,X):-positive(X),rule(k5). rule(k7,X):-negative(X),rule(l7). rule(l7,X):-positive(X),rule(m7). rule(l7,X):-negative(X),status(404). rule(m7,X):-positive(X),rule(n11). rule(m7,X):-negative(X),status(404). rule(k5,X):-positive(X),status(301). rule(k5,X):-negative(X),rule(l5). rule(l5,X):-positive(X),status(307). rule(l5,X):-negative(X),rule(m5). rule(m5,X):-positive(X),rule(n5). rule(m5,X):-negative(X),status(410). rule(n5,X):-positive(X),rule(n11). rule(n5,X):-negative(X),status(410). status(Code):-write(Code),write(' '),writeStatusMessage(Code). writeStatusMessage(200):-write('OK'). writeStatusMessage(201):-write('Created'). writeStatusMessage(202):-write('Accepted'). writeStatusMessage(204):-write('No Content'). writeStatusMessage(300):-write('Multiple Choices'). writeStatusMessage(301):-write('Moved Permanently'). writeStatusMessage(303):-write('See Other'). writeStatusMessage(304):-write('Not Modified'). writeStatusMessage(307):-write('Moved Temporarily'). writeStatusMessage(400):-write('Bad Request'). writeStatusMessage(401):-write('Unauthorized'). writeStatusMessage(403):-write('Forbidden'). writeStatusMessage(404):-write('Not Found'). writeStatusMessage(405):-write('Method Not Allowed'). writeStatusMessage(406):-write('Not Acceptable'). writeStatusMessage(409):-write('Conflict'). writeStatusMessage(410):-write('Gone'). writeStatusMessage(412):-write('Precondition Failed'). writeStatusMessage(413):-write('Request Entity Too Large'). writeStatusMessage(414):-write('Request URI Too Long'). writeStatusMessage(415):-write('Unsupported Media Type'). writeStatusMessage(501):-write('Not Implemented'). writeStatusMessage(503):-write('Service Unavailable'). goal request.