Предикаты нужно воспринимать так:
строка соответствует шаблону если строку можно превратить в список атомов и шаблон можно превратить в список атомов и список из строки соответствует правилу соответствия шаблону
Точно, именно навыки программистов и приводят к обилию ошибок в программах, потому как есть возможность реализовать задачу попроще. А если реализовывать задачу правильно, то нужно вникать в ее суть, а декларативный язык и заставляет этим заниматься.
Предикаты нужно воспринимать так:
строка соответствует шаблону если строку можно превратить в список атомов и шаблон можно превратить в список атомов и список из строки соответствует правилу соответствия шаблону
функции типа
Assert.AreEqual(expected, actual)тест зеленый — ok, иначе выведет сообщение…
на такой реализации получаем одну ошибку
isMatch(aa, a)->okisMatch(aa, *)->ok
isMatch(cb, ?a)->ok
isMatch(adceb, *a*b)->failed:expected-true
isMatch(acdcb, a*c?b)->ok
isMatch(aab, c*a*b)->ok
isMatch(mississippi, m??*ss*?i*pi)->ok
isMatch(abefcdgiescdfimde, ab*cd?i*de)->ok
isMatch(zacabz, *a?b*)->ok
isMatch(leetcode, *e*t?d*)->ok
isMatch(aaaa, ***a)->ok
isMatch(b, *?*?*)->ok
isMatch(aabbccbbccdd, a*b*c*d)->ok
true
вот тут можно попробовать самому:
swish.swi-prolog.org/p/Wildcard%20Matching.pl
:-assert_are_equal(isMatch(leetcode,'*e*t?d*'),false).А сообщение о правильном прохождении.