Улучшение кода OCaml с использованием локальных определений - PullRequest
0 голосов
/ 27 октября 2018

Я прохожу курс MOOC по OCaml, и у меня это было в качестве домашнего задания, которое включает в себя объединение строки с использованием только 5 операторов concat "^" и создание результирующей строки, в которой 9 вхождений исходной строки разделены ",".

Несмотря на то, что мне удалось решить это с помощью следующего решения, я думаю, что код недостаточно хорош / Я не понимаю концепцию использования локального определения.

let sentence = (let word3 = (let word2 = (let word1= word ^ "," in 
let word2 = word1 ^ word1 in word2) in 
let word3 = word2 ^word2 in word3) in
let word4 = word3 ^ word3 in word4) ^ word;;

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

1 Ответ

0 голосов
/ 27 октября 2018

Стоит отметить, что это выражение:

let a = b in a

эквивалентно этому выражению:

b

Если вы сделаете эту замену в своем коде, вы получите следующее:

let sentence =
    (let word3 =
        (let word2 = 
            (let word1 = word ^ "," in word1 ^ word1)
         in 
         word2 ^ word2)
     in
     word3 ^ word3) ^ word

Это довольно разумный код. Это немного трудно следовать из-за вложенности. Вы вложили let ... in так:

let a =
    let b = 3 in
    b * b
in
a + 7

Но вы могли бы иметь что-то более похожее на это:

let b = 3 in
let a = b * b in
a + 7

Если вы сделаете это изменение в своем коде, вы получите следующее:

let word1 = word ^ "," in
let word2 = word1 ^ word1 in
let word3 = word2 ^ word2 in
let sentence = word3 ^ word3 ^ word

Обновление

Обратите внимание, что это эквивалентно вашему коду, но не является полным выражением. Если вы хотите проверить это, добавьте это в конец:

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