Один подход заключается в «повороте» подстрока при работе через строку проверяемую, сравнивая посимвольно:
is_in(_, []) -> true;
is_in([H|T1], [H|T2]) -> is_in(T1++[H], T2);
is_in(_,_) -> false.
Первого пункт is_in/2
утверждает, что если мы 'проверил весь второй аргумент таким образом, что теперь это пустая строка, тогда ответ верен. Второе предложение проверяет с помощью сопоставления с образцом, что главы двух строк идентичны, и если это так, вызывает рекурсивно, когда голова первой строки поворачивается на хвост, а голова второй строки отбрасывается. Заключительное предложение is_in/2
возвращает false, чтобы обрабатывать случай, когда головки строк не совпадают.
Есть вероятность дополнительные проверки, которые необходимы на начальных аргументах, такие, как обеспечение длиной первой строки меньше или равен второй строки, гарантируя, что ни одна строка пуста, и т.д.