Last active
March 13, 2022 19:24
-
-
Save inebritov/2a6f1208112468d89934 to your computer and use it in GitHub Desktop.
simple expert system by this diagram: https://upload.wikimedia.org/wikipedia/commons/6/65/Http-headers-status.gif
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment