Имеется определенный набор математических выражений записанных следующим образом
В1: x1+x2
В2: x1+x2+1
В3: (x1+2)+(x1+3)
В4: (x1+2)*4
В5: (x1+2)+x2
где xi — некие шаблоны, которые соотвествуют некоторым неизвестным математическим выражениям.
Есть выражение без шаблонов. Например (1+2)+(1+3). Задача выбрать из верхнего набора выражений
такое шаблонное выражение, которое наиболее полно повторяло структуру исходного выражения.
Для примера очевидно, что выражению (1+2)+(1+3) соотвествуют шаблоны В1 ( x1=(1+2),x2=(1+3)) ,В3(x1=1) ,В5 (x1=1,x2=(1+3)).
В данном случае это В3, при x1=1
Здравствуйте, chukichuki, Вы писали:
C>Имеется определенный набор математических выражений записанных следующим образом C>В1: x1+x2 C>В2: x1+x2+1 C>В3: (x1+2)+(x1+3) C>В4: (x1+2)*4 C>В5: (x1+2)+x2
C>где xi — некие шаблоны, которые соотвествуют некоторым неизвестным математическим выражениям. C>Есть выражение без шаблонов. Например (1+2)+(1+3). Задача выбрать из верхнего набора выражений C>такое шаблонное выражение, которое наиболее полно повторяло структуру исходного выражения. C>Для примера очевидно, что выражению (1+2)+(1+3) соотвествуют шаблоны В1 ( x1=(1+2),x2=(1+3)) ,В3(x1=1) ,В5 (x1=1,x2=(1+3)). C>В данном случае это В3, при x1=1
Механизм сопоставления аргументов. Задача для функционального программирования.
На лиспе такое делается сравнительно несложно. Да и в любом языке, где поддерживаются многоуровневые списки.
На входе функции — шаблон и целевое выражение. На выходе — да/нет и если да, то таблица соответствия: переменные шаблона и их значения.
Оценочная функция: средняя громоздкость значения каждой переменной.