Типовой пример задачи: Слово – это конечный непустой список букв русского алфавита. Текст – это конечный непустой список слов. Два разных слова W? и W2 называется однокоренными, если W?=U1WV1, W?=U2WV2, где U1, V1, U2, V2 - непустые префиксы и суффиксы слов W?, W2, а W – слово, состоящее не менее чем из трех букв. Построить логическую программу, которая для заданного текста L вычисляет все пары X,Y однокоренных слов. Запрос к программе должен иметь вид ? G(L,X,Y). Решение: G( s.T , s , y ) <- checkroot( s , T , y) G( z.T , x , y) <- G( T , x , y) checkroot( k1.s1, (k2.s2).T, (k2.s2) ) <- onerootk( s1 , s2 , 3) checkroot( s1, z.T, s2 ) <- checkroot( s1 , T , s2) onerootk( x.L1 , y.L2 , 0) <- onerootk( x.L1 , x.L2 , k) <- onerootk( L1 , L2 , k-1) onerootk( x.L1 , y.L2 , k) <- onerootk( L1 , y.L2 , k) ! onerootk( x.L1 , y.L2 , k) <- onerootk( x.L1 , L2 , k) onerootk( x.L1 , y.L2 , 0) <-- это условие блочит суффиксы.