.. (לתיקייה המכילה) | ||
In question 3, subsection 3, what's the order the sort function should return? | |
The outputted cards should be ordered in ascending order. For instance S=[(GREEN,VAL 3),(YELLOW,STOP),(YELLOW,VAL 3)]; sort S; will produce: [(GREEN,VAL 3),(YELLOW,VAL 3),(YELLOW,STOP)]; |
In question 3 what is "GameOutcome"? | |
The GameOutCome datatype should contain a constructor Win with a parameter int, and an empty constructor Draw. |
Does question 3 game has TAKI? | |
The revised question doesn't have PLUS_ONE nor TAKI |
In question 3, what happens when the player, to act on PLUS_TWO, needs to take two cards but | |
In this case the user takes one card and then the game ends with a draw. |
In question 3, what can a player put if PLUS_TWO is at the top of the board stuck? | |
in case of moveNoAction any card with the same color (cannot put PLUS_TWO of other colors) in case of moveDoAction PLUS_TWO of any color. For a different action card one can put only cards with the same color. |
In question 3, what is the datatype needed to define? GameOutCome or moveOutCome? | |
you should define GameOutCome. |
In question 4 does a legitimate expression means compiling or running without errors? | |
In a static type system the enforcement is at compile time and in a dynamic type systems it's at run time. |
In question 3, what does SWITCH_DIRRECTION does in case of two players? | |
SWITCH_DIRRECTION does nothing in this case, the turn goes to the next player. |
In question 3, should we check that VAL is a number between 1 and 9? | |
VAL should contain an int, but will hold a number between 1 and 9. you don't need to check it. |
In question 3, SWITCH_DIRRECTION isn't spelled correctly. what spelling | |
please use the spelling as it is in the exercise. SWITCH_DIRRECTION |
In question 2 is ["1"] a legitimate Multilist? | |
Yes ["1"] is a legitimate Multilist and flatten ["1"] will return val it = [("1",0)] : (string * int) list That is "1" of depth zero. |
In question 1 and 2 for empty lists input we receive a warning: | |
You can ignore that warning. |
In questions 1 and 2, for empty lists what should flatten and splitswitch return? | |
For an empty switchlist, the function splitswitch should return: val it = ([],[]); For a "a" singleton switchlist, (in symbolic writing ["a"]) the function splitswitch should return: val it = (["a"],[]); For an empty Multylist, the function flatten should return: val it=[]; |
In question 3, what should we do in case of an empty players list or a players list with a single player? | |
You can ignore the cases of empty players list and a player list with a single player, they will not be checked. In those cases you can throw an exception of your choice, but any other solution will be accepted. |
In question 4, at the dynamic typing section the declaration of variables is confusing. | |
In a dynamically typed system variables have no types. So the way to look at the variable declarations in a dynamic type system would be: val one:=new First(); val two:=new Second(); val three:=new Third(); val four:=new Fourth(); |
In question 3, what should be the return types of play, moveNoAction and moveDoAction | |
The return type should be "GameOutCome * Board * Deck" but "GameOutCome * Board * Card list" will be accepted as well. (so they are both ok) |
In question 3, what does the two players lists received as input for moveNoAction, moveDoAction stand for? | |
The intention was that the conjunction of the two players lists is the list received from the function play. Each player from the head of the first list, after making his move, is removed from the first list, and is added to the head of the second. When the first list becomes empty, the two lists are switched. If you want to use only one of the lists in your solution, it is legitimate. |
In question 3, can we assume each card appears once? | |
Cards with the same color and value could appear several times during the game. |
In question 3, what is the use of the function sort? | |
The function should tell the player in case of uncertainty what card to play. The player should sort his cards before playing, and play the first card he can. |
In question 3, when should the DRAW returned? When the player the deck is empty | |
This case should be handled with pattern matching. That is, when a player is about to play with moveNoAction or moveDoAction and there are no cards in the deck, a (DRAW, board, []) should be returned. when board - is the playing board. |
in question 4, can we assume the initialization of the variables is without errors? | |
You can assume the construction of the values is without errors. |
How do we answer question 4? | |
You should only answer for each of the parts (aleph,beit,...) if the assignment is legitimate or not, according to each of the subsections (1.a, 1.b, 1.c, 1.d, 2.a,...). For instance for "(aleph) one:=two;" in "1.a" you should answer if that assignment is legitimate if type equivalence is structural and we have strong typing. There are 16 cases for question 1 ([aleph,beit,..] X [1.a,1.b,..]) and same for question 2. |
In question 4, should we provide explanations? | |
An observation should reduce the number of different cases to think of by two, you should note that observation and then can write a single answer for all those cases. There is no need of explanation for each (valid/not-valid) decision, but you can provide one if you want. |
In question 1, is ["a","b", 1] a legitimate switch list? | |
No. your datatype should not be able hold more values then allowed in the question. |
Hint about question 1 and 2. | |
You should think in the direction of the cons (::) operator for lists, what it does for lists, and define their equivalent here. Remember that any list can be written with cons and nil(the empty list). That is [1,2,3] can be written as 1::(2::(3::nil)). |
In question 2, is ["1", "2", ["1"], [["2"]]] a legitimate Multilist? | |
yes it's a legitimate Multilist. Please note that "1" is not a legitimate Multilist. |
In question 3 when is canGoOnTopOf should be called? and how should it react to +2? | |
canGoOnTopOf should be called from the function moveNoAction(not moveDoAction) and comply to the game rules defined by it (on top of an action cards can go only cards of the same color, on top of value cards can go cards of same color or same value.) |