Ошибка при попытке использовать или в операторе if else - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь написать функцию cardcolor с или внутри оператора if else, используя sml, как показано ниже

datatype suit = Clubs | Diamonds | Hearts | Spades;
datatype rank = Jack | Queen | King | Ace | Num of int;
type card = suit * rank;
datatype color = Red | Black;

fun cardColor(x:suit,y:rank):color = if (x = Clubs) or (x = Spades) then Black else Red;

, но отображается это сообщение об ошибке:

 assig4.m:7.53-7.55 Error: unbound variable or constructor: or
 assig4.m:7.57 Error: unbound variable or constructor: X
 assig4.m:7.38-7.88 Error: operator is not a function [tycon mismatch] 
   operator: bool   
   in expression:   
     (x = Clubs) <errorvar>

Как можноЯ правильно оцениваю 2 утверждения в операторе if?Я пробовал использовать бар X = пики или трефы и по-разному записать его, но все они не работают с разными ошибками.

Ответы [ 2 ]

3 голосов
/ 24 апреля 2019

Ключевые слова для сокращения соединения и дизъюнкции: andalso и orelse в SML.

fun cardColor(x : suit, y : rank) : color =
  if x = Clubs orelse x = Spades then Black else Red
1 голос
/ 24 апреля 2019

Помимо отличного ответа Андреаса Россберга, вы можете рассмотреть возможность использования сопоставления с образцом:

fun cardColor suit = case suit of
         Clubs    => Black
       | Spades   => Black
       | Diamonds => Red
       | Hearts   => Red
...