Coursera язык программирования hw2 - PullRequest
0 голосов
/ 12 апреля 2020
fun officiate (clist , mlist , score) =
    let val hlist = []
    in
      let
        fun appendh ([], _, score) = hlist
          | appendh (_, [], score) = hlist 
          | appendh (c :: clist', m :: mlist', score) = 
        case (sum_cards(hlist) > score, m) of
            (true, _) => hlist
          | (false, Draw) => c :: appendh(clist', mlist', score)
          | (false, Discard a) => remove_card(hlist, a, IllegalMove) @ appendh(clist', mlist', score)                            
      in
        score(appendh(clist, mlist, score), score)
      end
    end

// val officiate = fn: список карт * список перемещения * int -> int

// val score = fn: список карт * int -> int

Когда Я использую эту функцию , Я поймал эту ошибку:


  • use "hw2.sml"; [Открытие hw2.sml] hw2.sml: 137.6-137.48 Ошибка: оператор не является функцией [несоответствие tycon] оператор: int в выражении: оценка (приложение (clist, mlist, оценка), оценка) val it = (): единица

Тип данных, который я установил ранее:


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

datatype color = Red | Black  (*spades  and  clubs  are  black,diamonds and hearts are red)*) 
datatype move = Discard of card | Draw 

exception IllegalMove

И я использую функцию счета, которую я создал раньше , Он может работать правильно:

fun score (xs, score) =   
    let val sum = sum_cards(xs)
    in
       case (all_same_color(xs), sum > score) of
            (true, true) => (3 * (sum - score)) div 2
          | (true, false) => (score - sum) div 2
          | (false, true) => 3 * (sum - score)
          | (false, false) => score - sum
    end

1 Ответ

0 голосов
/ 12 апреля 2020

Я понял, я могу использовать переменную оценка , которая является функцией оценки.

...