Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Таунсенд Проектирование и программная реализац...doc
Скачиваний:
15
Добавлен:
12.11.2019
Размер:
4.53 Mб
Скачать
  1. Begin dup ноль not

  2. While r@ связь

  3. 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

  1. ( #ЭЛЕМЕНТОВ -> )

  2. \ #ЭЛЕМЕНТОВ-МАКСИМ. ЧИСЛУ ЭЛЕМЕНТ. СПИСКА

  3. : НОВСПИСОК CREATE HERE 2+ , НУЛЬ , 2* ALLOT ;

  4. ( ©СПИСОК -> ©ПЕРВЫЙ)

  5. \ ©ПЕРВЫЙ-УКАЗАТ.НА ПЕРВЫЙ ЭЛЕМ.СПИСКА

  6. : ПЕРВЫЙ @ ;

10 ( ©СПИСОК | НУЛЬ -> ФЛАГ)

  1. \ ФЛАГ - ИСТИНА, ЕСЛИ СПИСОК ПУСТОЙ

  2. : НОЛЬ ©НУЛЬ- ;

13 ( ©СПИСОК-> ©ХВОСТ)

  1. \ ©ХВОСТ - УКАЗАТЕЛЬ НА ОСТАТОК СПИСКА

  2. : ХВОСТ DUP НОЛЬ IF @ ELSE 2- THEN ;

Экр # 43 C:PROLOG.BLK

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-83

  3. ( © -> ФЛАГ) \ ФЛАГ - ИСТИНА, ЕСЛИ © ДАЕТ 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

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-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

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-83

2 UNNEST

  1. ( ©СПИСОК -> ©ПОСЛЕДНИЙ) \ ВОЗВРАЩАЕТ

  2. \ УКАЗАТЕЛЬ НА ПОСЛЕДНИЙ

  3. \ ЭЛЕМЕНТ СПИСКА С УКАЗАТЕЛЕМ ©СПИСОК

  4. : ПОСЛЕДНИЙ DUP ХВОСТ НОЛЬ NOT

  1. IF ХВОСТ РЕКУРСИЯ

  2. THEN 9;

  1. \ ИТЕРАТИВНЫЙ ВАРИАНТ СЛОВА ПОСЛЕДНИЙ

  2. : ПОСЛЕДНИЙ

  1. BEGIN DUP ХВОСТ НОЛЬ NOT

  2. WHILE ХВОСТ

  3. REPEAT 15;

Экр # 45 CPROLOG.BLK

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-83

2 ( -> С) \ ЧТЕНИЕ ОЧЕРЕДНОГО СИМВОЛА ИЗ

3 \ ВХОДНОГО ПОТОКА

4 : ЧТСИМ BEGIN ИСТОЧНИК >IN @ /STRING

  1. IF С© 1 >IN +! TRUE

  2. ELSE DROP ['] ИСТОЧНИК >BODY © [']

7 (ИСТОЧНИК) -

8 IF QUERY ELSE 1 BLK +! 0 >IN ! THEN FALSE

9 THEN

10 UNTIL ; ( -> CFA)

  1. \ ЕСЛИ СЛОВА НЕТ В СЛОВАРЕ,

  2. \ СОЗДАЕТСЯ ПЕРЕМЕННАЯ

  3. : 7CREATE >IN @ DEFINED

  4. IF NIP ELSE DROP >IN ! HERE VARIABLE 4 + NAME>

  5. THEN ;

Экр # 48 CPROLOG.BLK

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-83

2 ( ©СПИСОК -> N) \ ВОЗВРАЩАЕТ ЧИСЛО

3 \ ЭЛЕМЕНТОВ В СПИСКЕ

4 : ДЛИНА DUP НОЛЬ

  1. IF DROP 0

  2. ELSE ХВОСТ РЕКУРСИЯ 1+

  3. THEN ; 8

9 UNNEST

  1. \ ДЛИНА. ИТЕРАТИВНЫЙ ВАРИАНТ

  2. :ДЛИНА 0

  1. BEGIN OVER НОЛЬ NOT

  2. WHILE 1+ SWAP ХВОСТ SWAP

  3. REPEAT NIP 15;

Экр # 46 C:PROLOG.BLK

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-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

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-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

  1. 20 НОВСПИСОК II

  2. 20 НОВСПИСОК 12

  3. 20 НОВСПИСОК 13 5

  1. VARIABLE SI

  2. VARIABLE S2

  3. VARIABLE S3 9

  1. II ЧТСП (SI S2-S3 )

  2. 12 ЧТСП (SI II @S2S3)

  3. 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

  1. \ ЛИСПОПОДОБНЫЕ СЛОВА ПОСТРОЕНИЯ СПИСКОВ

  2. \ НА ФОРТЕ-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