Как можно эмулировать результаты этого оператора if тогда then при использовании правильного синтаксиса? - PullRequest
0 голосов
/ 02 февраля 2019

Работа над упражнением для университетского класса, похоже, не представляет того, что я пытаюсь сделать с правильным синтаксисом в ocaml.Я хочу, чтобы функция sum_positive суммировала все положительные целые числа в списке в одно значение типа int и возвращала это значение.

let int x = 0 in    
let rec sum_positive (ls: int list) = function    
  |h::[] -> x (*sum of positive ints in list*)    
  |[] -> 0    
  |h::t -> if (h >= 0) then x + h then sum_positive t else sum_positive t (*trying to ensure that sum_positive t will still run after the addition of x + h*)

При компиляции я столкнулся с этой ошибкой,

File "functions.ml", line 26, characters 34-38:    
Error: Syntax error

Это указывает на тогдашнее утверждение, которое я имею там, я знаю, что оно не может работать, но я не могу думать ни о каких других представлениях, которые могли бы.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

У меня возникла проблема, связанная с параметром, я полагаю, это произошло потому, что я пытался добавить значение int в функцию типа int list.Вот чем я закончил.

let rec sum_positive = function
|[] -> 0
|h::t -> if h > 0 then h + (sum_positive t) else sum_positive t

намного проще, чем я думал.

0 голосов
/ 02 февраля 2019

У вас есть if ... then ... then, что синтаксически недопустимо.

Похоже, вы спрашиваете, как написать то, что вы имеете в виду, таким образом, что является синтаксически допустимым.Но не совсем понятно, что вы имеете в виду.

Вы можете оценить два выражения в OCaml последовательно (одно за другим), разделив их ;.Возможно, это то, что вы имеете в виду.

Однако мне кажется, что у вашего кода большие проблемы, чем просто синтаксис.Похоже, вы пытаетесь использовать x в качестве накопленной суммы для расчета.Вы должны знать, что переменные OCaml, такие как x, являются неизменяемыми.Как только вы говорите let x = 0, значение не может быть изменено позже.x всегда будет 0. Выражение x + h не меняет значение x.Он просто оценивает новое значение.

Обычный способ выполнить эту работу - передать x в качестве параметра функции.

...