Почему я получаю сообщение об ошибке для bool в операторе if - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сделать оператор if, где он должен увидеть, если список пуст или нет.Тогда это должно вернуть bool истины или ложьНо я получаю сообщение об ошибке.Как мне исправить это.

Lint: if a then true else false может быть преобразован в a.

  let isGameOver (p : player ) (b : board) : bool =
  let fstb = fst b
  let sndb = snd b
    if List.sum (fst b) = 0 || List.sum (snd b) = 0 then
      true
    else 
      false 

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Почему я получаю сообщение об ошибке для bool в операторе if?
Как мне это исправить?

Часть кода, на которой вам нужно сосредоточиться

if List.sum (fst b) = 0 || List.sum (snd b) = 0 then
      true
    else 
      false 

Результат оператора if равен bool, например, true или false

Lint достаточно умен, чтобы знать, что вы используете if для возвратаbool и условная часть операторов if также является типом bool.Что говорит Линт, так это то, что

if (expr) then
      true
    else 
      false 

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

Таким образом, изменение состоит в том, чтобы просто использовать часть выражения ifкак

List.sum (fst b) = 0 || List.sum (snd b) = 0
0 голосов
/ 14 ноября 2018

На самом деле это не сообщение об ошибке, а сообщение от linter о том, что вы можете изменить свой код.

На что намекает линтер, так это то, что ваша функция возвращает true всякий раз, когда выражение List.sum (fst b) = 0 || List.sum (snd b) = 0 равно true и false всякий раз, когда оно равно false. Таким образом, оператор if не нужен.

0 голосов
/ 14 ноября 2018

Ваше выражение if имеет формат if a then true else false, поэтому вы можете изменить его, как предложено.Вы также можете заменить использование fst и snd на сопоставление с образцом:

let isGameOver (p : player) (fstb, sndb) : bool =
  List.sum fstb = 0 || List.sum sndb = 0
...