Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Prolog Булева функция https://www.cyberforum.ru/prolog/thread139299.html
Помогите пожалуйста решить задачу : Определим операторы: :- op( 100, fy, ~). :- op( 110, xfy, &). :- op( 120, xfy, v). Булева формула есть терм, определяемый следующим образом: константы true...
Prolog Поиск по базе данных Студенты
У меня программа написана в Visual Prologe-выдает сообщение об ошибке Nondeterministic clause student Nondeterministic predicate matematik domains man=symbol oz=integer predicates ...
Определить предикат P(List1, list2, list3) Prolog
Помогите решить, пожалуйста: 1.определить предикат P(List1, list2, list3), который истинен, если все элементы списка list1 принадлежат списку List2 и не принадлежат списку list3. 2.определить...
Prolog Удаление произвольного элемента из списка Необходима программа, удаляющая произвольный элемент из списка. Посоветовали вбить как del(_,,):-!. del(El,,T):-!. del(El,,):-del(El,T,T1). , но прога всё равно почему-то не работает, руки... https://www.cyberforum.ru/prolog/thread138914.html
Prolog Есть ли с этого языка интерпретатор online? https://www.cyberforum.ru/prolog/thread138899.html
Есть ли с этого языка интерпретатор online?
Prolog Работа с файлами
Помогите решить задачу. Найти в текстовом файле две самые короткие строки.
Prolog Напишите предикат, который в качестве результата выдает список
Напишите предикат p(+L, + P, -R), который в качестве результата выдает список, состоящий из всех элементов списка L, начиная с первого элемента списка L, не удовлетворяющего данному предикату P....
Prolog Список, структура и головоломка 1. написать программу замены элементов списка, номера которых заданы списком, на произвольную константу 2. написать программу, решающую головоломку "игра в восемь" 1 2 3 8 4 7 6 5 применить... https://www.cyberforum.ru/prolog/thread138146.html
Prolog Многомерные массивы https://www.cyberforum.ru/prolog/thread137973.html
Реализовать эмуляцию работы со списками, как с многомерными массивами: получение и изменение значения любого элемента массива. Многомерный массив задаётся как список подсписков. Например, трёхмерный...
Prolog Добавление в базу и удаление из неё У меня есть база территория(название,категория,год_создания,площадь,область) Мне нужно добавить элемент в базу (сначала ввожу название, потом категорию и т.д. и должно добавить) и удалить... https://www.cyberforum.ru/prolog/thread137831.html
WazZzuP
4 / 4 / 1
Регистрация: 23.09.2015
Сообщений: 12
02.06.2010, 11:44 0

Упрощение арифметических выражений

02.06.2010, 11:44. Просмотров 2752. Ответов 6
Метки (Все метки)

Ответ

По книжке этой получилась вот такая программа, только она не работает. Числовые выражения считает, но ругается при введении переменной.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
rule(A*B,B*A).
rule(A+B,B+A).
rule(A+B+C,A+(B+C)).
rule(A*B*C,A*(B*C)).
rule(A*B/C,A*(B/C)).
rule(A*(B+C),A*B+A*C).
rule(A*(B-C),A*B-A*C).
rule(A*B+A*C,A*(B+C)).
rule(A*B-A*C,A*(B-C)).
rule((A+B)*(A-B),A*A-B*B).
rule(A*A-B*B,(A+B)*(A-B)).
rule(A*X+X,(A+1)*X).
rule(X,X).
 
compute(X+Y,Z):- integer(X), integer(Y), Z is X+Y.
compute(X*Y,Z):- integer(X), integer(Y), Z is X*Y.
compute(X-Y,Z):- integer(X), integer(Y), Z is X-Y.
compute(X/Y,Z):- integer(X), integer(Y), Z is X/Y.
compute(1*X,X).
compute(0+X,X).
compute(0*X,0).
compute(X/X,1).
 
expr(Expr,Res):-
    Expr =.. [Op,A,B],
    expr(A,A1),
    expr(B,B1),
    R =.. [Op,A1,B1],
    (compute(R,Res);rule(R,Res)).
expr(X,X):- atomic(X).
 
convert(X,R):- search([X],[R|_]).
search(R,R).
search(P,R):-
    prolong(P,P1),
    search(P1,R,D1).
prolong([X|T],[Y,X|T]):-
    move(X,Y), not(member(Y, [X|T])).
 
cost(X,0):- number(X).
cost(X,1):- atom(X).
cost(X,Z):-
    X =.. [Op,A,B],
    cost(A,CA), cost(B,CB),
    Z is CA+CB+2.
 
simplify(E,R):-
    cost(E,C),
    search([E],C,R,[]).
 
move_grad(E1,E2):- expr(E1,E2), bettereq(E2,E1).
bettereq(E1,E2):- cost(E1,C1), cost(E2,C2), C1=<C2.
better(E1,E2):- cost(E1,C1), cost(E2,C2), C1<C2.
 
filter([],C,[]).
filter([X|T],C,[X|R]):- cost(X,CC), CC<C, !, filter(T,C,R).
filter([X|T],C,R):- filter(T,C,R).
 
search([X|T],C,R,Ban):-
    setof(Z,move_grad(X,Z),L), C1 is C-1, 
    filter(L,C1,L1), L1\=[],
    search(L1,C1,R,[]).
 
search([X|T],C,R,Ban):-
    setof(Z,move_grad(X,Z),L), C1 is C-1,
    filter(L,C1,L1), L1-[],
    appenduniq(T,L,Q),
    removeall(Q,[X|Ban],Res),
    search(Res,C,R,[X|Ban]).
 
search([X],_,X,_).
 
appenduniq(L1,L2,R):- setof(X,(member(X,L1),member(X,L2)),R).
removeall(L,S,R):- setof(X,(member(X,L),not(member(X,S))),R).
 
?- read(X), simplify(X,L), write(L),nl.


Вернуться к обсуждению:
Упрощение арифметических выражений
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2010, 11:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Упрощение выражений
Извините за трату времени , но прошу вас помочь. Дали пример по логике , но слишком много зачётов и...

Упрощение выражений
При помощи каких законов упрощаются данные выражения(фото в приложении).

Упрощение выражений на Lisp
Здравствуйте, уважаемые профессионалы и начинающие специалисты! Появилась необходимость в...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.