Switch statements in Prolog

It seems that multiple clauses are made for this use case and also quite concise.

output(javascript, Type, ["javascript", Type]).
output(ruby, Type, ["def", Type]).
output(java, Type, [Type]).

In Prolog it is quite easy to define your own control structures, using meta-predicates (predicates that take goals or predicates as arguments).

For example, you could implement a switch construct like

switch(X, [
    a : writeln(case1),
    b : writeln(case2),
    c : writeln(case3)
])

by defining

switch(X, [Val:Goal|Cases]) :-
    ( X=Val ->
        call(Goal)
    ;
        switch(X, Cases)
    ).

If necessary, this can then be made more efficient by compile-time transformation as supported by many Prolog systems (inline/2 in ECLiPSe, or goal expansion in several other systems).

And via operator declarations you can tweak the syntax to pretty much anything you like.