Трудности в написании программы - Prolog

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите пожалуйста со следующей проблемой=) Начинаю программировать на прологе) Разобрался со всеми базовыми вещами, но столкнулся с определённой задачей, реализовать, которую пока не получается=( Смысл заключается в следующем: даны алгебраические выражения, цифры заменены буквами, а знаки арифметических операций заменены знаками вопроса, надо найти подстановки, которые обратят равенства в верные тождества. Например: ACHS / DD = NXS HOB ? SS = HXN NXS - DOC = HXN Подскажите пожалуйста примерный алгоритм, или может сталкивались с чем-то похожим) Буду благодарен любым подсказкам))

Решение задачи: «Трудности в написании программы»

textual
Листинг программы
zapolnit_ciframi1([],L,L).
zapolnit_ciframi1([H|Tail],L,L1):-nonvar(H),!,zapolnit_ciframi1(Tail,L,L1).
zapolnit_ciframi1([H|Tail],L,L1):-select(H,L,Temp),zapolnit_ciframi1(Tail,Temp,L1).
 
zapolnit_ciframi([H|Tail],L,L1):-zapolnit_ciframi1([H|Tail],L,L1),H\='0'.
 
zapolnit(A,L,L1):-zapolnit_ciframi(A,L,L1).
zapolnit(V,L,L1):-(V=A+B;V=A-B;V=A*B;V=A/B;V=A?B),
    zapolnit_ciframi(A,L,Temp),zapolnit_ciframi(B,Temp,L1).
 
naiti(A=B,A1=B1):-
    zapolnit(A,['0','1','2','3','4','5','6','7','8','9'],L),zapolnit(B,L,_),
    poschitat(A,A1),poschitat(B,B1),A1=:=B1.
 
poschitat(A,N):-is_list(A),number_chars(N,A).
poschitat(V,A1+B1):-(V=A+B;V=A?B),poschitat(A,A1),poschitat(B,B1).
poschitat(V,A1-B1):-(V=A-B;V=A?B),poschitat(A,A1),poschitat(B,B1).
poschitat(V,A1*B1):-(V=A*B;V=A?B),poschitat(A,A1),poschitat(B,B1).
poschitat(V,A1/B1):-(V=A/B;V=A?B),poschitat(A,A1),poschitat(B,B1).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.5 из 5