float int a = 2; object c; list b = getValues(); c = a + b[2]; // Object plus"> float int a = 2; object c; list b = getValues(); c = a + b[2]; // Object plus">

Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS345 Project Presentation Language: H-- Mikhail Iakhiaev.

Similar presentations


Presentation on theme: "CS345 Project Presentation Language: H-- Mikhail Iakhiaev."— Presentation transcript:

1 CS345 Project Presentation Language: H-- Mikhail Iakhiaev

2 Features Overview List Comprehension Support for Tuples and Lists Lambda expressions For-each loop Support for Strings Miscellaneous features –Declarations can appear anywhere –Built-in functions: "print", "println".

3 Typing Basic Types – int, bool, float, void, string, list, tuple, object. Function types: –"(bool, bool, bool)": like Huskell Mixed static/dynamic typing: int a = 2, b = 3, c; c = a + b; // Integer plus float x = 5.0, y; y = b + x - a; // Implicit int->float int a = 2; object c; list b = getValues(); c = a + b[2]; // Object plus

4 Lists/Tuples Support for immediate values: –list a = [1, 2, 3]; tuple b = ("John", 4); Arbitrary level of nesting Accessing the elements: a[3]. Difference: tuple elements can not be assigned values. list createDept() { return [ (10, "ACCOUNTING", "NEW YORK"), (20, "RESEARCH", "DALLAS"), (30, "SALES", "CHICAGO"), (40, "OPERATIONS", "BOSTON") ]; }

5 List Comprehension Multiple "generators" and conditions "_" are properly recognized Easy to implement the joins of different lists. List comprehension actually declares variables "name", "city", and "date" (all object). list emp = createEmp(); list dept = createDept(); list dbRes = [ (name, date, city) | (_, name, _, _, date, _, d1) <- emp, (d2, _, city) <- dept, d1 == d2 ]; println("Query Result: ", dbRes);

6 List Comprehension(2) [ (name, date, city) | (_, name, _, _, date, _, d1) <- emp, (d2, _, city) <- dept, d1 == d2]; C:\Documents and Settings\miakhiae\Desktop\proj>hmm test.c Query Result: [ (KING, 17-NOV-81, NEW YORK), (BLAKE, 01-MAY-81, CHICAGO), (CLARK, 09-JUN-81, NEW YORK), (JONES, 02-APR-81, DALLAS), (SCOTT, 09-DEC-82, DALLAS), (FORD, 03-DEC-81, DALLAS), (SMITH, 17-DEC-80, DALLAS), (ALLEN, 20-FEB-81, CHICAGO), (WARD, 22-FEB-81, CHICAGO), (MARTIN, 28-SEP-81, CHICAGO), (TURNER, 08-SEP-81, CHICAGO), (ADAMS, 12-JAN-83, DALLAS), (JAMES, 03-DEC-81, CHICAGO), (MILLER, 23-JAN-82, NEW YORK) ]

7 Lambda Expressions Use Function Types: (arg1,... argN, returnType) "First-class citizens", because they can be passed into the other functions just like other variables. Only variables of the Function Types can be executed as Lambdas Note, the "x, y" variables are declared by each Lambda int main () { bool eqRes = equivalence2( (\ x, y -> !(x || y)), (\ x, y -> !x && !y) ); println("Result: ", eqRes); } bool equivalence2( (object, object, object) a, (object, object, object) b ) { list l = [a(x, y) == b(x, y) | x <- [true, false], y <- [true, false]]; return and(l); }

8 For-each loop Somewhat similar to List Comprehension Executes the body instead of creating a list. Declares the loop variable. bool and(list lst) { bool result = true; for (l <- lst) { result = result && l; } return result; } object calcExpense(list emp) { object sum = 0; for ((_, _, _, _, _, sal, _) <- emp) { sum = sum + sal; } return sum; }

9 Scoping/Binding Static Scoping. The scopes can be: –Block –List comprehension –Lambda Definition Static Binding –Variables in the Lambda expression are bound to where the Lambda is defined. Function arguments: –List/tuple: pass by reference. –Other: pass by value

10 Static Binding example Note, the variable x in the Lambda expression binds to the x in the getSelector, not the one in the main or selectDept20. int main() { list emp = createEmp(); int x = 6000; println( selectDept20(emp, getSelector()) ); } (object, bool) getSelector() { int x = 1000; return (\ y -> y < x); } list selectDept20(list emp, (object, bool) selector) { int x = 20; return [ (name, sal) | (_, name, _, _, _, sal, dept) <- emp, selector(sal), dept == x]; } OUTPUT: [ (SMITH, 800) ]

11 Strings are Fun println("All the salesmen: ", [ (name, sal) | (_, name, pos, _, _, sal, _) <- createEmp(), pos == "SALESMAN" ]); println("People who alphabetically follow Martin: ", [ name | (_, name, _, _, _, _, _) "MARTIN"]); C:\Documents and Settings\miakhiae\Desktop\proj>hmm test_str.c All the salesmen: [ (ALLEN, 1600), (WARD, 1250), (MARTIN, 1250), (TURNER, 1500) ] People who alphabetically follow Martin: [SCOTT, SMITH, WARD, TURNER, MILLER]

12 Questions? ????


Download ppt "CS345 Project Presentation Language: H-- Mikhail Iakhiaev."

Similar presentations


Ads by Google