circles.pl

来自「PRl教学程序 PRl教学程序 PRl教学程序」· PL 代码 · 共 53 行

PL
53
字号
/********************************************************************
    Constraint-based Graphical Programming in B-Prolog
    %
    draw fancy circles
*********************************************************************/
go:-
    N=31,
    functor(T,circles,N),
    T=..[_|Circles],
    createCircles(Circles),
    %
    cgSameCenterY(Circles),
    constrainSize(T,1,N),
    constrainColor(Circles),
    %
    cgStartRecord(circles),
    cgShow(Circles),
    cgStopRecord.

createCircles([]).
createCircles([C|Cs]):-
    cgCircle(C),
    createCircles(Cs).

constrainSize(T,N0,N):-
    2*N0<N,!,
    I is 2*N0,
    J is 2*N0+1,
    arg(N0,T,C0),
    arg(I,T,C1),
    arg(J,T,C2),
    C0^diameter #= 2*C1^diameter,
    C2^diameter #= C1^diameter,
    C1^x #= C0^x, C2^x #= C0^centerX,
    N1 is N0+1,
    constrainSize(T,N1,N).
constrainSize(_T,_N0,_N).

%two circles that are of the same size must have the same color
%and two circles that are of different sizes must have different colors
constrainColor([]):-!.
constrainColor([_]):-!.
constrainColor([C|Cs]):-
    constrainColor(C,Cs),
    constrainColor(Cs).

constrainColor(_C,[]).
constrainColor(C,[C1|Cs]):-
    C^color #\= black, C^color #\= darkGray, C^color #\= gray, C^color #\= blue,
    (C^diameter #= C1^diameter) #=> C^color #= C1^color,
    (C^diameter #\= C1^diameter) #=> C^color #\= C1^color,     
     constrainColor(C,Cs).

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?