Автор работы: Пользователь скрыл имя, 03 Июня 2012 в 11:52, практическая работа
Вещественное число – текстовая строка, состоящая из целой и (или) дробной частей, впереди возможно размещение знака (“+” / “-”) числа, целая часть отделяется от дробной части символом точки (“.”).
Семантика (смысл) языка – интерпретирующая функция, ставящая в соответствие синтаксическим компонентам определенные значения.
1.1. Определение
Вещественное число – текстовая строка, состоящая из целой и (или) дробной частей, впереди возможно размещение знака (“+” / “-”) числа, целая часть отделяется от дробной части символом точки (“.”).
Семантика (смысл) языка – интерпретирующая функция, ставящая в соответствие синтаксическим компонентам определенные значения.
1.2. Задание № 1
Написать грамматику вещественных чисел для системы счислений с основанием М=2.
1.3. Задание № 2
Создать Prolog – программу грамматического разбора для языка вещественных чисел.
1.4. Задание № 3
Определить интерпретирующую функцию, равную количеству цифр в целой и дробной частях числа.
(Задание №1)
ВЕЩ à ЗНАК МОДУЛЬ
ВЕЩ à МОДУЛЬ
ЗНАК à ‘+’ | ’-’
МОДУЛЬ à ‘.’ ЦИФРА ДРОБЬ
МОДУЛЬ à ЦИФРА ОСТАТОК
ОСТАТОК à
ОСТАТОК à ‘.’ ДРОБЬ
ОСТАТОК à ЦИФРА ОСТАТОК
ДРОБЬ à
ДРОБЬ à ЦИФРА ДРОБЬ
ЦИФРА à ‘0’ | ‘1’
(Задания № 2, № 3)
DOMAINS
el=char*
PREDICATES
treal(el,integer,integer)
modul(el,integer,integer)
dmodul(el,integer)
ostatok(el,integer,integer)
drob(el,integer)
cifra(char)
CLAUSES
treal(['+'|X],KC,KD):-
modul(X,KC,KD).
treal(['-'|X],KC,KD):-
modul(X,KC,KD).
treal(X,KC,KD):-
modul(X,KC,KD).
modul(['.'|D],KC,KD):-
KC=0,
dmodul(D,KD).
modul([C|O],KC,KD):-
cifra(C),
ostatok(O,K1,KD),
KC=K1+1.
dmodul([C|D],KD):-
cifra(C),
drob(D,KD1),
KD=KD1+1.
ostatok([],0,0).
ostatok(['.'|D],KC,KD):-
KC=0,
drob(D,KD).
ostatok([C|O],KC,KD):-
cifra(C),
ostatok(O,K1,KD),
KC=K1+1.
drob([],0).
drob([C|D],KD):-
cifra(C),
drob(D,KD1),
KD=KD1+1.
cifra('0'):-!.
cifra('1'):-!.
GOAL
treal(['+','0','.','1'],
%treal(['+','1','1','.','0'],
%treal(['+','0','1','.','1','
При проверке первой строки из раздела GOAL получаем результат:
KOLICH_CEL=1, KOLICH_DROB=1
1 Solution
При проверке второй строки из раздела GOAL получаем результат:
KOLICH_CEL=2, KOLICH_DROB=1
1 Solution
При проверке третьей строки из раздела GOAL получаем результат:
KOLICH_CEL=2, KOLICH_DROB=2
1 Solution