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