Skip to content

Instantly share code, notes, and snippets.

@inebritov
Last active March 13, 2022 19:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inebritov/2a6f1208112468d89934 to your computer and use it in GitHub Desktop.
Save inebritov/2a6f1208112468d89934 to your computer and use it in GitHub Desktop.
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