Цезарь шифр проверить в окамле - PullRequest
0 голосов
/ 23 января 2012

Я хочу реализовать функцию проверки, которая с учетом двух строк s1 и s2 будет проверять, является ли s2 значением caesar cipher of s1 или нет. поверхность должна выглядеть как string->string->bool.

проблема в том, что мне не разрешено использовать какие-либо строковые функции, кроме String.length, так как я могу это решить? мне не разрешено никаких list array, iterations. Только recursions и pattern matching.

Пожалуйста, помогите мне. А также можете ли вы сказать мне, как я могу написать функцию подстроки в ocaml, кроме функции модуля с вышеуказанными ограничениями?

1 Ответ

1 голос
/ 23 января 2012

Я предполагаю, что вам, вероятно, разрешено использовать s.[i] для получения i-го символа строки s.Это то же самое, что String.get, но преподаватель может не думать об этом в таких терминах.Без какой-либо формы получения отдельных символов для строки, я считаю, что это невозможно.Вероятно, вам следует проверить его с инструктором, но я был бы удивлен, если бы он имел в виду, что вы не можете разделить строку на символы (что вы не можете сделать с помощью сопоставления с образцом в Ocaml).

Как только вы можете получить отдельные символы, способ сделать это должен быть довольно ясным (вам не нужна подстрока для рекурсивного обхода каждой строки).

Если вы все еще хотите написать подстроку, создайте еебыло бы сложно, так как у вас нет доступа к String.create или другим подобным функциям.Но вы можете написать свою собственную версию String.create, используя рекурсию, строковые литералы одного символа (например, "x"), возможность устанавливать символ в строке на другой (например, s.[0] <- c) и конкатенацию строк (s1 ^ s2).).Опять же, конечно, все это предполагает, что эти операторы разрешено использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...