#ocaml
Вопрос:
В настоящее время я изучаю OCaml, и я не ладю с синтаксисом. Я не нашел в Интернете ни одного подходящего совета. Я в основном хочу вызвать функцию и повторно использовать ее результат в той же функции.
find_by_name
это функция, которая находит пищу по ее названию
ingredients
является частью записи и списка
avg
это функция, которая вычисляет среднее значение
Моя функция в настоящее время выглядит так: это ужасно неправильно, но я не знаю, что изменить.
let avg_veggie_kcal name fd = find_by_name name fd -gt; avg x.ingredients
Ответ №1:
Вы можете использовать локальную привязку let let ... = ... in ...
для обозначения промежуточных результатов некоторых вычислений:
let some_function input = let intermediary_result = first_computation_step input in second_computation_step intermediary_result
Ответ №2:
let avg_veggie_kcal name fd = match find_by_name name fd with x -gt; avg x.ingredients
…предполагая find_by_name
, что возвращает запись с ingredients
полем, и ingredients
поле имеет тип ввода to avg
.
Комментарии:
1. Сопоставление шаблонов в этом случае дает тот же результат, что и при использовании локальной привязки let, но более подробное. Теперь, если
find_by_name name fd
бы в результате мы хотели сопоставить несколько шаблонов, это имело бы больше смысла. Кроме того, если это возвращает тип записи, для облегчения доступа к этому полю можно использовать привязку match или local let.match find_by_name name fd with { ingredients=i; _ } -gt; avg i