birmaga.ru
добавить свой файл

1
;; перевернуть список


[define rev (lambda (x)

[prog ((r ()))

[loop E .l1 [set r (.E !.R)].R]

])] ;; здесь return можно не писать – вернется значение последнего оператора
;;определение сопоставления, здесь пров. на палиндром)

[DEFINE F1 (KAPPA () [AUT () [LIST 1] [SAME (x) (*x .x)]])]
;; - [SUM (6 3 2 1) 5] = (2 3)

[DEFINE SUM (LAMBDA(L N) [PROG(K (M ()) (S 0))

A [SET K [AMONG .L]]

[SET M (.K !.M)]

[SET S [+ .S .K]]

[COND ([EQ .S .N] [RETURN .M]) ([LT .S .N] [GO A])

(T [FAIL])]])]
;;все рез-ты: [PROG() [ALT() [RETURN T]] ...

[PRINT [SUM (6 3 2 1) 5]] ... [FAIL] ])
;;

[DEFINE MAIN ( LAMBDA ( )

[PROG ( ОТВ ИМЯ КЛАСС ОБ )

[ WHILE T [ PRINT 'РАБОТАЕТ ЭКСПЕРТНАЯ СИСТЕМА']

[ PRINT 'У ВАС ЕСТЬ ЗАДАЧА .. ?' ]

[ PSET ОТВ[ YES_NO ]

[ COND ( [ EQ.ОТВ НЕТ] [ EXIT MAIN MAIN ] )

[ PRINT 'ВВЕДИТЕ ИМЯ...']

[ PSET ИМЯ [ READ ]]

[ IF ( [ PERM | GOAL ( .ИМЯ - *КЛАСС) ) ]

; PERM - функция управления неуспехом , отменяет все развилки и операторы

PSET ОБ [ GETA ( .ИМЯ - .КЛАСС ) ОБСН]]

;вытащить в ОБ обоснование из объекта

[ OUTPUT .ИМЯ .КЛАСС .ОБ ] ); end if

;распечатка

[ T [ MPRINT КЕМ ЯВЛЯЕТСЯ .ИМЯ Я НЕ ЗНАЮ] ) ]

[ CLEAR DB] ] ] ) ]
[ DEFINE TIGER? ( CONSEQ ( ИМЯ ОБ ОБ1 ОБ2 )

( *ИМЯ - ТИГР ) ; хотим док что тигр.

[ GOAL ( .ИМЯ - МЛЕК ) ]

[ GOAL ( .ИМЯ - ХИЩНИК) ]

[ GOAL ( .ИМЯ ИМЕЕТ РЫЖ.-КОР. ОКРАСКУ) ( TEST ОТВ ДА ) ]

[ GOAL ( .ИМЯ ИМЕЕТ ТЕМ.-ПОЛ. ) ( TEST ОТВ ДА ) ]

[ PSET ОБ1 [ GETA ( .ИМЯ - МЛЕК) ОБСН ]]

[ PSET ОБ2 [ GETA ( .ИМЯ - ХИЩНИК) ОБСН ]]

[ PSET ОБ ( ( .ИМЯ - ТИГР) ТАК КАК ( .ИМЯ - МЛЕК )

( .ИМЯ - ХИЩНИК )

( .ИМЯ ИМЕЕТ РКО)

( .ИМЯ ИМЕЕТ ТЕМНЫЕ ПОЛОСЫ )


!.ОБ1 !.ОБ2 ) ]

[ PASSERT ( .ИМЯ - ТИГР) ( WITH ОБСН .ОБ) ] ) ]
;обращение пользователя чтобы выяснить окраску

[ DEFINE ОКРАСКА ( CONSEQ ( ИМЯ ОТВ )

( * ИМЯ ИМЕЕТ РКО )

[ IF ( [ SEARCH1( .ИМЯ ИМЕЕТ РКО ) ( TEST ОТВ *ОТВ ) ] )

( [ MPRINT .ИМЯ ИМЕЕТ РКО? ]

[ PSET ОТВ [YES_NO] ]

[ PASSERT ( .ИМЯ ИМЕЕТ РКО ) ( WITH ОТВ .ОТВ ) ] ) ]

[ COND ( [ EQ.ОТВ НЕТ ]

[ FAIL ] ) ]) ]
;----------------------------------

[ DEFINE ХИЩНИК1? ( CONSEQ ( ИМЯ ОБ )

( *ИМЯ - ХИЩНИК ); что доказывает теорема, имя т. пользователю знать не надо

[ GOAL ( .ИМЯ ПИТАЕТСЯ МЯСОМ ) ]

[ PSET ОБ ( ( .ИМЯ - ХИЩНИК ) ТАК КАК ( ПИТАЕТСЯ МЯСОМ ) ) ]

[ PASSERT ( .ИМЯ - ХИЩНИК ) ( WITH ОБСН .ОБ ) ] ) ]
;------------------------------------

[ DEFINE ХИЩНИК2? ( CONSEQ ( ИМЯ ОБ )

( *ИМЯ - ХИЩНИК ); что доказывает теорема, имя т. пользователю знать не надо

[ GOAL ( .ИМЯ ИМЕЕТ ОСТРЫЕ ЗУБЫ ) ]

[ GOAL ( .ИМЯ ИМЕЕТ КОГТИ ) ]

[ GOAL ( .ИМЯ ИМЕЕТ ГЛАЗА СПЕРЕДИ ) ]

[ PSET ОБ ( ( .ИМЯ - ХИЩНИК ) ТАК КАК ( .ИМЯ имеет ОСТРЫЕ ЗУБЫ) ( .ИМЯ имеет КОГТИ) ( .ИМЯ имеет ГЛАЗА СПЕРЕДИ) ) ]

[ PASSERT ( .ИМЯ - ХИЩНИК ) ( WITH ОБСН .ОБ ) ] ) ]