What is the grading policy of the course? | |
Assignments: - About 6 assignments - Weight is up to 30% (TAKEF) - Teams of 2 (strict!) - Matching services provided by teaching assistants. Final exam: - Date set by the authorities. - Weight is 70% or more. Final Grade: - If exam grade > 50: exam 70-90%, assignments 10-30%. - Otherwise: 100% exam The homework weight will normally be 20%; however, if the need will arise, we will adjust the homework weight rather than use a "factor" to normalize the grades. We believe that using the homework grades is more fair than using a meaningless factor. (But, again, under normal circumstances, it'll just be 20%.) |
What is the late submittion policy for the HW assignments? | |
Homework assignments may be submitted up to 5 days late; each day will incur a grade penalty of 5 points. Friday and Saturday together are considered 1 day. When submitting late, mail the wet part directly to the TA responsible for the assignment, and put the dry part in that TA's mailbox. Very important: write on the first page: 1, Submission time and date 2, If you got an late submission approval: the approved submission time and date If you don't have late submission approval: write "Late submission is not approved" |
When we call some of our functions with Nil as a parameter, we receive a message like: | |
ML gives you this warning when you call a polymorphic function with a polymorphic parameter. You can read more about this at the end of tutorial 1. For assignments in this course, you may ignore these warnings. |
Standard ML - May we ignore "Warning: calling polyEqual" warnings? | |
Yes. This warning doesn't indicate any real problem with the code. You can also try turning these warnings off with the command: "Control.polyEqWarn := false" |
when we "consult" our file we get: | |
It indicates that there is one or more variable in the clause that appears only once. This is never necessary as the first appearance of a variable always succeeds with a successful binding. Prolog has the anonymous variable named _ for this purpose. So just use _ instead of Y. |
Some times when finishing returning answers it returns immediately to the prompt and sometimes it waites to ; and only then return to the prompt. | |
Prolog returns to the prompt when it finish going over all the rules. If it returns the answer and it finished going over all the rules it will finish the execution and return to the prompt. If there are rules that it didn't check he will wait for ';' or '.' ';' continues the execution and Prolog will continue to check the other rules (then returns another answer if there is one or finish the execution and return to the prompt) '.' finish the execution. It doesn't meters whether it waits or not. What meters is the sequence of answers. Make sure the sequence is correct and each answer is returned only once. |
Can we use built-in predicates: | |
Yes you may. |
In some of our "functions" after I get an answer it waits for ";" or ".", if I press ";" the it returns false. Is that a problem? | |
It is not a problem. It continue going over the rules he didn't go over yet and doesn't find other results. |
I am getting the character # in some of ML's replys to my declarations, and the declared values seem to be too short. Is this OK? | |
Yes it is (generally). The # char is ML saying `etc etc'. You can make ML type out fully the declared value by using this command at the beginning of your session: - 'Compiler.Control.Print.printDepth := 1000;' (or 'Control.Print.printDepth := 1000;') |
Prolog: Should we copy all given predicts from the pdf file to our file? | |
You should copy all relevant predicates to your file so it can be loaded independently. |
How can we print in ML? | |
You can print string values: val non = print "Hello World\n"; The constant non is not used. It's declaration has a side effect of printing to command prompt. Conversing int to string and printing: val non = print ((Int.toString 15) ^ "\n"); You can do the same using: Bool.toString and Real.toString Printing an argument: fun foo 0 = 0 | foo x = let val non = print ((Int.toString x)^ " "); in x + foo (x-1) end; Conversing int list to string: fun intListToString [] = "" | intListToString (x::xs) = (Int.toString x) ^ " , " ^(intListToString xs); Conversing int list list to string: (might be useful for printing the board) fun intListListToString [] = "" | intListListToString (x::xs) = (intListToString x) ^ " | " ^ (intListListToString xs); Don't forget to remove prints before submission! |
How can we print in Prolog? | |
If you want to add prints in order to understand what's going on you can add the goal: write(...) this goal always succeeds and has the side-effect of writing text to the console. For example, given the following rule: test :- permutation([1,2,3],L), write(L), fail. When asking: test. We'll get [1, 2, 3][2, 1, 3][2, 3, 1][1, 3, 2][3, 1, 2][3, 2, 1] false |