CodeMirror: Prolog mode

## Prolog mode

:- use_module(library(clpfd)). % Example by Markus Triska, taken from the % SWI-Prolog manual. sudoku(Rows) :- length(Rows, 9), maplist(length_(9), Rows), append(Rows, Vs), Vs ins 1..9, maplist(all_distinct, Rows), transpose(Rows, Columns), maplist(all_distinct, Columns), Rows = [A,B,C,D,E,F,G,H,I], blocks(A, B, C), blocks(D, E, F), blocks(G, H, I). length_(L, Ls) :- length(Ls, L). blocks([], [], []). blocks([A,B,C|Bs1], [D,E,F|Bs2], [G,H,I|Bs3]) :- all_distinct([A,B,C,D,E,F,G,H,I]), blocks(Bs1, Bs2, Bs3). problem(1, [[_,_,_,_,_,_,_,_,_], [_,_,_,_,_,3,_,8,5], [_,_,1,_,2,_,_,_,_], [_,_,_,5,_,7,_,_,_], [_,_,4,_,_,_,1,_,_], [_,9,_,_,_,_,_,_,_], [5,_,_,_,_,_,_,7,3], [_,_,2,_,1,_,_,_,_], [_,_,_,_,4,_,_,_,9]]). /** Examples problem(1, Rows), time(sudoku(Rows)), maplist(writeln, Rows). */

MIME types defined: `text/x-prolog`.

The Prolog mode aims at smart indentation and basic coloring. As the Prolog language lacks reserved words, its syntax may be extended using opertor declarations and terms can, depending on their context, be either data, goals or code, meaningful coloring of Prolog code requires deep analysis of the entire file and its imported depedencies.

Enhanced coloring is provided by means of an addon that relies on support from a Prolog HTTP server which analyses the code and returns a sequence of semantically annotated tokens. Below is a screenshot of the result, showing the same code as above.