Balanced brackets: Difference between revisions

Content added Content deleted
m (Reduced some redundant expressions in the section of Common Lisp)
Line 3,729: Line 3,729:
false</lang>
false</lang>


=={{header|Mercury}}==
<lang Mercury>
:- module balancedbrackets.
:- interface.

:- import_module io.

:- pred main(io::di, io::uo) is det.


:- import_module list, random, char.

:- pred brackets(int::in,list(char)::out,supply::mdi,supply::muo) is det.

:- pred imbalance(list(char)::in,int::out) is semidet.
:- pred balanced(list(char)::in) is semidet.

:- implementation.

:- import_module int.

imbalance([],0).
imbalance(['['|T],N) :- imbalance(T,N+1).
imbalance([']'|T],N) :- N > 0, imbalance(T,N-1).

balanced(S) :- imbalance(S,0).

brackets(N,S,!RS) :-
(
N < 1 -> S is []
; random(0,2,R,!RS),
( R is 0 -> S is ['['|T], brackets(N-1,T,!RS)
; S is [']'|T], brackets(N-1,T,!RS))).

main(!IO) :-
random.init(0,RS),
brackets(4,S,RS,_),
print(S,!IO),
(
balanced(S) -> print(" is balanced\n",!IO)
; print(" is unbalanced\n", !IO)
).
</lang>
=={{header|Nim}}==
=={{header|Nim}}==
<lang nim>
<lang nim>