Skip to content

Instantly share code, notes, and snippets.

@inebritov
Last active March 13, 2022 19:24
Show Gist options
  • Select an option

  • Save inebritov/2a6f1208112468d89934 to your computer and use it in GitHub Desktop.

Select an option

Save inebritov/2a6f1208112468d89934 to your computer and use it in GitHub Desktop.

Revisions

  1. inebritov revised this gist Mar 13, 2022. No changes.
  2. inebritov revised this gist May 19, 2015. 1 changed file with 98 additions and 98 deletions.
    196 changes: 98 additions & 98 deletions http_codes.pro
    Original file line number Diff line number Diff line change
    @@ -8,82 +8,82 @@ predicates
    request.

    clauses
    positive("").
    positive("y").
    positive("Y").
    positive("yes").
    positive("Yes").
    positive("YES").

    negative("n").
    negative("N").
    negative("no").
    negative("No").
    negative("NO").
    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,
    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):-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).
    @@ -252,34 +252,34 @@ clauses
    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").
    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
  3. inebritov renamed this gist May 19, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. inebritov created this gist May 14, 2015.
    286 changes: 286 additions & 0 deletions http_codes
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,286 @@
    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.