- •Глава 1
- •Глава 2 системы, основанные на знаниях
- •Глава 3
- •Глава 4 представление знаний
- •Глава 5 инженерия знаний
- •Глава 6
- •Часть 2
- •Variable имя_переменной
- •60 11 /Mod swap drop
- •16 Base ! ,
- •If a then или if a else в then
- •1 Of a endof
- •2 Of в endof 3 of с endof drop endcase
- •Слова literal (в), слова ; (с). Переменная ip переводится словом периода выполнения в положение сброшенного указателя
- •Глава 7 обработка списков
- •И ыный
- •Глава 8 методы программирования
- •Рекурсии)
- •Глава 9
- •Правило: имеет-волос-покров1
- •Правило: имеет-волос-покров2 (имеет-волос-покров )
- •Предложения нуль установить предложения чтсп
- •Р ис. 9.3. След поиска
- •If добавить-цели then ;
- •4 Begin (поиск)
- •10 Else
- •Глава 10
- •Глава 11
- •Begin dup ноль not
- •While r@ связь
- •If 2drop
- •If получить-цель @ найти-предложение?
- •If добавить-цели false
- •If false else false true then
- •Имёет-рыже-корич-окрас имеет-темиые-пятна ) 14
- •Глоссарий
- •Часть I. Экспертные системы - системы, основанные на знаниях
- •Часть 2. Построение систем,
Begin dup ноль not
While r@ связь
REPEATE R> 2DROP '
8 ( ©СПИСОК I -> ) \ РЕКУРСИВНОЕ ОПРЕДЕЛЕНИЕ
9 \2СОЕД 10 : 2СОЕД OVER НОЛЬ
11 12 13 14 15
If 2drop
ELSE OVER ХВОСТ OVER РЕКУРСИЯ
SWAP ПЕРВЫЙ SWAP СВЯЗЬ THEN
Экр # 40 CPROLOG.BLK
0 \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
1 \ ЛИСПА НА ФОРТЕ-83
2 VARIABLE НУЛЬ НУЛЬ НУЛЬ ! \ ПУСТОЙ СПИСОК 3
( #ЭЛЕМЕНТОВ -> )
\ #ЭЛЕМЕНТОВ-МАКСИМ. ЧИСЛУ ЭЛЕМЕНТ. СПИСКА
: НОВСПИСОК CREATE HERE 2+ , НУЛЬ , 2* ALLOT ;
( ©СПИСОК -> ©ПЕРВЫЙ)
\ ©ПЕРВЫЙ-УКАЗАТ.НА ПЕРВЫЙ ЭЛЕМ.СПИСКА
: ПЕРВЫЙ @ ;
10 ( ©СПИСОК | НУЛЬ -> ФЛАГ)
\ ФЛАГ - ИСТИНА, ЕСЛИ СПИСОК ПУСТОЙ
: НОЛЬ ©НУЛЬ- ;
13 ( ©СПИСОК-> ©ХВОСТ)
\ ©ХВОСТ - УКАЗАТЕЛЬ НА ОСТАТОК СПИСКА
: ХВОСТ DUP НОЛЬ IF @ ELSE 2- THEN ;
Экр # 43 C:PROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
( © -> ФЛАГ) \ ФЛАГ - ИСТИНА, ЕСЛИ © ДАЕТ PFA
3 \ ПЕРЕМЕННОЙ
4 : ATOM? BODY> <§>['] НУЛЬ © - ;
6 7 8 9 10 11 12 13 14 15
5 ( ©СПИСОК -> ) ВЫДАТЬСП CR ." ("
BEGIN DUP ПЕРВЫЙ DUP ATOM?
IF DUP НОЛЬ NOT
IF BODY> >NAME .ID ELSE DROP THEN
ELSE РЕКУРСИЯ
THEN ХВОСТ DUP НОЛЬ UNTIL 8 ( ЗАБОЙ ) EMIT ." ) " DROP
274
275
Экр # 44 C:PROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
3 4 5 6 7 8 9 10 11 12 13 14 15
2 ( ©СПИСОК -> ) ВЫДАТЬ DUP @ НОЛЬ
IF DROP CR ." НУЛЬ" ELSE DUP ATOM?
IF BODY> >NAME .ID
ELSE ВЫДАТЬСП
THEN THEN
Экр # 47 C:PROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
2 UNNEST
( ©СПИСОК -> ©ПОСЛЕДНИЙ) \ ВОЗВРАЩАЕТ
\ УКАЗАТЕЛЬ НА ПОСЛЕДНИЙ
\ ЭЛЕМЕНТ СПИСКА С УКАЗАТЕЛЕМ ©СПИСОК
: ПОСЛЕДНИЙ DUP ХВОСТ НОЛЬ NOT
IF ХВОСТ РЕКУРСИЯ
THEN 9;
\ ИТЕРАТИВНЫЙ ВАРИАНТ СЛОВА ПОСЛЕДНИЙ
: ПОСЛЕДНИЙ
BEGIN DUP ХВОСТ НОЛЬ NOT
WHILE ХВОСТ
REPEAT 15;
Экр # 45 CPROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
2 ( -> С) \ ЧТЕНИЕ ОЧЕРЕДНОГО СИМВОЛА ИЗ
3 \ ВХОДНОГО ПОТОКА
4 : ЧТСИМ BEGIN ИСТОЧНИК >IN @ /STRING
IF С© 1 >IN +! TRUE
ELSE DROP ['] ИСТОЧНИК >BODY © [']
7 (ИСТОЧНИК) -
8 IF QUERY ELSE 1 BLK +! 0 >IN ! THEN FALSE
9 THEN
10 UNTIL ; ( -> CFA)
\ ЕСЛИ СЛОВА НЕТ В СЛОВАРЕ,
\ СОЗДАЕТСЯ ПЕРЕМЕННАЯ
: 7CREATE >IN @ DEFINED
IF NIP ELSE DROP >IN ! HERE VARIABLE 4 + NAME>
THEN ;
Экр # 48 CPROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
2 ( ©СПИСОК -> N) \ ВОЗВРАЩАЕТ ЧИСЛО
3 \ ЭЛЕМЕНТОВ В СПИСКЕ
4 : ДЛИНА DUP НОЛЬ
IF DROP 0
ELSE ХВОСТ РЕКУРСИЯ 1+
THEN ; 8
9 UNNEST
\ ДЛИНА. ИТЕРАТИВНЫЙ ВАРИАНТ
:ДЛИНА 0
BEGIN OVER НОЛЬ NOT
WHILE 1+ SWAP ХВОСТ SWAP
REPEAT NIP 15;
Экр # 46 C:PROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
3 4 5 6 7 8 9 10 11 12 13 14 15
2 ( I -> ) ЧТСП >R
BEGIN ЧТСИМ CASE BL
OF FALSE ENDOF ASCII ( OF НУЛЬ FALSE ENDOF ASCII ) OF R@ СПИСОК TRUE ENDOF ASCII © OF © FALSE ENDOF
-1 >IN +! 7CREATE EXECUTE FALSE ROT ENDCASE UNTIL R> DROP
Экр # 49 CPROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
2 ( ЭЛЕМЕНТ ©СПИСОК -> @ХВОСТ) \ ЕСЛИ ЭЛЕМЕНТ В СПИСКЕ \ ПРИСУТСТВУЕТ, ТО
4\
5\
6\
7 :
8
9
10
11
12
13
14;
15
©ХВОСТ БУДЕТ ОСТАТКОМ СПИСКА, НАЧИНАЮЩЕГОСЯ С ЭЛЕМЕНТА; ИНАЧЕ НУЛЬ ЧЛ SWAP OVER НОЛЬ IF 2DROP НУЛЬ ELSE OVER ПЕРВЫЙ OVER - IF DROP
ELSE SWAP ХВОСТ РЕКУРСИЯ THEN THEN
276
277
Экр # 50 CPROLOG.BLK
0 \ ОТДЕЛЬНЫЕ СПИСКИ 1
20 НОВСПИСОК II
20 НОВСПИСОК 12
20 НОВСПИСОК 13 5
VARIABLE SI
VARIABLE S2
VARIABLE S3 9
II ЧТСП (SI S2-S3 )
12 ЧТСП (SI II @S2S3)
13 ЧТСП (S3) 13
14 15
Экр 0\ 1
2 (
3
4
5
6
7
8
9
10
11
12
13
14
15
# 53 OPROLOG.BLK
УНИФИКАЦИЯ ПРОЛОГА НА ФОРТЕ-83
Cl C2 -> F ) РАВНО 2DUP - IF 2DROP TRUE
ELSE 2DUP ATOM? SWAP ATOM? OR IF 2DROP FALSE
ELSE 2DUP ПЕРВЫЙ SWAP ПЕРВЫЙ SWAP РЕКУРСИЯ -ROT ХВОСТ SWAP ХВОСТ SWAP РЕКУРСИЯ AND THEN THEN
Экр # 51 OPROLOG.BLK
\ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ
\ НА ФОРТЕ-83
3 4 5 6 7 8 9 10 11 12 13 14 15
2 ( С СШ -> СП2) АССОЦ DUP НОЛЬ IF NIP
ELSE 2DUP ПЕРВЫЙ ПЕРВЫЙ -
IF ПЕРВЫЙ NIP
ELSE ХВОСТ РЕКУРСИЯ
THEN THEN
Экр # 54 C:PROLOG.BLK
0 \ ПРИМЕР РЕКУРСИИ: ВЫЧИСЛЕНИЕ ФАКТОРИАЛА 1
2 ( N М -> )
3 : «ФАКТОРИАЛ OVER 0-
4
5
6
7 ;
8
9 ( M -> M!)
10 : ФАКТОРИАЛ 1 «ФАКТОРИАЛ ; 11 12 13 14 15
IFNIP
ELSE OVER * SWAP 1- SWAP РЕКУРСИЯ
THEN