MBrace. MBrace MBrace. MBrace.Azure

Size: px
Start display at page:

Download "MBrace. MBrace MBrace. MBrace.Azure"

Transcription

1

2

3

4

5 MBrace MBrace MBrace MBrace.Azure

6

7 MBrace ftp://ftp.softlab.ntua.gr/pub/techrep/

8

9 MBrace

10 MBrace

11 MBrace.Azure MBrace.Azure

12

13 MBrace

14

15

16

17 MBrace MBrace MBrace MBrace MBrace MBrace MBrace MBrace.Core MBrace

18 MBrace MBrace.Azure MBrace MBrace MBrace MBrace MBrace.Azure MBrace MBrace.Azure

19 MBrace C#, VB.NET, etc MBrace ML MBrace cexpr

20 cbuilder Bind, Return, Zero [[let! [[let binding in cexpr]] let binding in [[cexpr]] pattern = expr in cexpr]] cbuilder.bind(expr,(fun pattern -> [[cexpr]])) [[do! expr in cexpr]] cbuilder.bind(expr,(fun () -> [[cexpr]])) [[return expr]] cbuilder.return(expr) [[return! expr]] cbuilder.returnfrom(expr) [[use pattern = expr in cexpr]] cbuilder.using(expr,(fun pattern -> [[cexpr]])) [[use! pattern = expr in cexpr]] cbuilder.bind(expr, (fun value -> cbuilder.using(value, (fun value -> [[cexpr]]))) [[if expr then cexpr 0 else cexpr 1 ]] if expr then [[cexpr 0 ]] else [[cexpr 1 ]] [[while expr do cexpr]] cbuilder.while( [[try cexpr with pattern i -> expr i ]] cbuilder.trywith( (fun () -> expr), cbuilder.delay([[cexpr]])) cbuilder.delay([[cexpr]]), (fun value -> match value with [[try cexpr finally expr]] cbuilder.tryfinally( pattern i -> expr i exn -> reraise exn))) cbuilder.delay([[cexpr]]), (fun () -> expr)) [[cexpr 0 ; cexpr 1 ]] cbuilder.combine([[cexpr 0 ]] ; [[cexpr 1 ]]) [[other-expr ; cexpr]] expr ; [[cexpr]] [[other-expr ]] expr ; cbuilder.zero() Bind Return bind return Method Signature Bind Return : M< T> * ( T M< U>) M< U> : T M< T>

21 let getlengthasync (uri : Uri) : Async<int> = async { let client = new System.Net.WebClient() let! html = client.asyncdownloadstring(uri) return html.length } html Async<T> async{ } Async<T> T Async.Parallel : Async< T>[] Async< T[]> Async.RunSynchronously : Async< T> T Async.StartImmediate Async.Sleep... : Async<unit> unit : int Async<unit> MBrace Cloud<T> T let helloworld : Cloud<int> = cloud { return 42 } MBrace Cloud<T> T let runtime = Runtime.GetHandle(azureConfiguration) let result = runtime.run helloworld val result : int = 42

22 MBrace.Azure MBrace

23 MBrace

24

25 MBrace MBrace MBrace Cloud.Parallel Cloud.Parallel : Cloud< T> seq Cloud< T []> Async.Parallel Cloud.Parallel let parallelworkflow : Cloud<int []> = cloud { let compute i = cloud { return i * i } let! results = [1..10] > List.map compute > Cloud.Parallel return results } // Evaluate workflow runtime.run(parallelworkflow) val it : int [] = [ 1; 4; 9; 16; 25; 36; 49; 64; 81; 100 ] Cloud.Parallel Cloud.Parallel

26 MBrace.Azure MBrace.Core Cloud.Choice Cloud.Choice : Cloud< T option> seq Cloud< T option> option Some None Some None Cloud.Choice let findindex (xs : T []) (item : T) : Cloud<int option> = cloud { return! xs > Seq.mapi (fun index x index, x) > Seq.map (fun (i,x) cloud { return if x = item then Some i else None }) > Cloud.Choice } // Evaluate workflow runtime.run(findindex [ ] 42) val it : int option = Some 42 Cloud.Choice Cloud.StartAsTask MBrace ICloudTask<T> Cloud.StartAsTask

27 Cloud.StartAsTask : Cloud< T> Cloud<ICloudTask< T>> Cloud.AwaitCloudTask : ICloudTask< T> Cloud< T> Cloud.StartChild : Cloud< T> Cloud<Cloud< T>> ICloudTask<T> MBrace.NET Task Parallel Library Task<T> let workflow : Cloud<int * TimeSpan> = cloud { // Spawn a CloudTask let! ctask = Cloud.StartAsTask( cloud { do! Cloud.Sleep return 42 }) let watch = Stopwatch.StartNew() // Block until ctask completes let! value = ctask.awaitresult() watch.stop() return value, watch.elapsed } // Evaluate workflow runtime.run workflow val it : int * TimeSpan = (42, 00:00: ) CloudTask Cloud.StartAsTask MBrace Cloud.Parallel Cloud.Choice MBrace ICancellationToken ICloudTask<T> ICancellationTokenSource CancellationTokenSource.Token Local<T> Cloud<T> Cloud<T>

28 let tryexecute (workflow : Cloud< T>) (interval : int) : Cloud< T option> = cloud { let! cts = Cloud.CreateCancellationTokenSource() let! ctask = Cloud.StartAsTask(workflow, cancellationtoken = cts.token) do! Cloud.Sleep interval cts.cancel() try let! value = ctask.awaitresult() return Some value with :? OperationCanceledException return None } let test = cloud { do! Cloud.Sleep return 42 } runtime.run(tryexecute test 20000) val it : int option = Some 42 runtime.run(tryexecute test 5000) val it : int option = None MBrace MBrace.NET let workflow = cloud { try let! ctask = Cloud.StartAsTask(cloud { return 1 / 0 }) return! ctask.awaitresult() with ex do! Cloud.Log ex.stacktrace return! Cloud.Raise(ex) }

29 runtime.run(workflow) System.DivideByZeroException: Attempted to divide by zero. at unitvar) at ctx, Unit t) in C:\workspace\MBrace.Core\src\MBrace.Core\Continuation\Builders. fs:line 287 MBrace MBrace IWorkerRef Cloud.Parallel : seq<cloud< T> * IWorkerRef> Cloud< T []> Cloud.Choice : seq<cloud< T option> * IWorkerRef> Cloud< T option> Cloud.StartAsTask : Cloud< T> * IWorkerRef Cloud<ICloudTask< T>> IWorkerRef MBrace.Azure MBrace.Core Cloud<T> MBrace MBrace Local<T> Cloud<T>

30 Local Cloud local Local.Parallel : (computations : seq<local< T>>) Local< T []> Local.Choice Cloud.AsLocal Cloud.OfAsync... : (computations : seq<local< T option>>) Local< T option> : (computation : Cloud< T>) Local< T> : (computation : Async< T>) Local< T> WebClient downloadparallel Cloud.Parallel Cloud<T> Parallel Local< T> local Error: Cloud<string * string> is not compatible with type Local< a>. downloadparallel Local.Parallel let downloadparallel uri1 uri2 : Local<string * string> = local { use webclient = new System.Net.WebClient() let download uri = webclient.asyncdownloadstring(uri) > Cloud.OfAsync // Error: Cloud<string * string> is not compatible with // type Local< a> let! values = Cloud.Parallel(download uri1, download uri2) return values } let downloadparallel uri1 uri2 : Local<string * string> = local { use webclient = new System.Net.WebClient() let download uri = webclient.asyncdownloadstring(uri) > Cloud.OfAsync let! values = Local.Parallel(download uri1, download uri2) return values

31 } MBrace MBrace MBrace.Core MBrace.Azure let workflow = cloud { return IO.File.OpenWrite foo.txt } runtime.run(workflow) Failed to execute job d a8d4eb3802bbf2b46dfe87f > Nessos.FsPickler.NonSerializableTypeException: Type MBrace.Azure.Runtime.Primitives.Result[System.IO.FileStream] contains non-serializable field of type System.IO.FileStream. MBrace MBrace let workflow : Cloud<int> = cloud { let cell = ref 0 do! [1..10] > List.map (fun _ cloud { cell :=!cell + 1 }) > Cloud.Parallel > Cloud.Ignore return!cell

32 } runtime.run workflow val it : int = 0 MBrace let workflow = cloud { let largeobj = [ ] return! [1..10] > List.map (fun _ cloud { return largeobj.length }) > Cloud.Parallel } largeobj MBrace.Flow MBrace.Flow MBrace.Core MBrace.Flow open MBrace.Flow let workflow : Cloud<(string * int64) []> = CloudFlow.OfCloudFileByLine foobar.txt > CloudFlow.collect(fun line line.split( )) > CloudFlow.filter(fun word word.length > 3) > CloudFlow.countBy id > CloudFlow.toArray MBrace.Flow

33 MBrace MBrace CloudFile MBrace CloudFile CloudFile MBrace MBrace CloudFile let writelines path (lines : string seq) : Cloud<CloudFile> = cloud { let writer (stream : Stream) = async { use sr = new IO.StreamWriter(stream) for line in lines do sr.writeline(line) } return! CloudFile.Create(path, writer) } // Evaluate workflow let file = runtime.run(writelines temp/foobar.txt [ Hello ; world ]) val file : CloudFile = temp/foobar.txt // Evaluate in local client rather than the cluster runtime.runlocally(cloudfile.readlines(file.path)) val it : seq<string> = seq [ Hello ; world ] CloudFile.WriteLines

34 MBrace CloudValue<T> CloudValue CloudFile.NET CloudValue let workflow = cloud { let! cvalue = CloudValue.New [ ] return! [1..10] > List.map (fun _ cloud { // Dereference and compute let! value = cvalue.value return value.length }) > Cloud.Parallel } CloudValue CloudSequence<T> Cloud- Value T let workflow = cloud { let! cseq = CloudSequence.New [ ] return! [1..10] > List.map (fun _ cloud { // Dereference and fetch on demand let! values = cseq.toenumerable() return Seq.length values })

35 } > Cloud.Parallel CloudSequence MBrace CloudChannel<T> CloudChannel ISendPort< T> IReceivePort< T> CloudChannel let tick : Cloud<IReceivePort<int>> = cloud { // Both send and receive port are serializable in MBrace.Azure let! send, recv = CloudChannel.New<int>() let rec aux count = cloud { do! send.send(count) do! Cloud.Sleep 1000 return! aux (count + 1) } // Spawn do! Cloud.StartAsTask(aux 0) > Cloud.Ignore return recv } let recv = runtime.run(tick) val recv : IReceivePort<int> runtime.runlocally(recv.receive()) val it : int = 0 runtime.runlocally(recv.receive()) val it : int = 1 runtime.runlocally(recv.receive()) val it : int = 2 ICloudAtom<T>

36 let workflow = cloud { let! atom = CloudAtom.New(0) do! [1..42] > List.map (fun _ // Atomic updates CloudAtom.Update(atom, fun x x + 1)) > Cloud.Parallel > Cloud.Ignore return! CloudAtom.Read(atom) } runtime.run(workflow) val it : int = 42 CloudAtom ICloudDictionary< T>.NET ConcurrentDictionary let memoizer (dictionary : ICloudDictionary< T>) (f : U T) (x : U) = cloud { let key = x.tostring() let! value = dictionary.tryfind(key) match value with Some v return v None let value = f x do! dictionary.add(key, value) return value } MBrace ICloudDisposable type ICloudDisposable = abstract Dispose : unit Local<unit>

37 IDisposable.NET MBrace use using CloudValue let workflow = cloud { use! cvalue = CloudValue.New 42 failwith boom! // cvalue is out of scope, dispose return () } MBraceMBrace.Azure CloudFile CloudAtom<T> CloudDictionary<T> CloudChannel<T> CloudValue<T> CloudSequence<T> MBrace

38

39 MBrace MBrace.Azure MBrace type FaultPolicy = { Policy : int exn TimeSpan option } Cloud.FaultPolicy : Local<FaultPolicy> Cloud.WithFaultPolicy : FaultPolicy Cloud< T> Cloud< T> Cloud.StartAsTask : (Cloud< T> * FaultPolicy) Cloud<ICloudTask< T>> MBrace

40

41 MBrace

42

43 Cloud<T> MBrace.Azure Cloud.Parallel Cloud<T> Continuation<T> Cloud<T> type Continuation< T> = { SCont : T unit ECont : exn unit CCont : OperationCancelledException unit } Cloud<T> scont econt ccont Continuation<T> Cloud.Parallel

44 MBrace IDistributionProvider CloudFile CloudAtom Cloud- Channel CloudDictionary ExecutionContext

45 type ExecutionContext = { Token : ICloudCancellationToken Runtime : IDistributionProvider JobQueue : JobQueue CloudFileProvider : CloudFileProvider CounterFactory : CounterFactory CustomResources : seq<obj> } Continuation<T> ExecutionContext Continuation<T> ExecutionContext ExecutionContext Continuation<T> type Continuation< T> = { SCont : ExecutionContext T unit ECont : ExecutionContext exn unit CCont : ExecutionContext OperationCancelledException unit } Cloud<T> Continuation<T> Continuation<T> ExecutionContext MBrace

46 Cloud.FromContinuations< T> : (ExecutionContext Continuation< T> unit) Cloud< T> Cloud.GetResource< T> : unit T Cloud.FromContinuations Cloud<T> type Cloud< T> = ExecutionContext Continuation< T> unit Cloud<T> Cloud.Parallel MBrace.Azure let scheduleparallel(computations : seq<#cloud< T>>) : Cloud< T []> = Cloud.FromContinuations( fun (ctx : ExecutionContext) (cont : Continuation< T []>) let n = computations.length // aggregate and call cont.scont when all complete let sconts = mksuccessconts n cont // call cont.econt on first exception let econts = mkerrorconts n cont // call cont.ccont on first cancellation let cconts = mkcancelconts n cont let (jobs : Job []) = pack(sconts, econts, cconts) // serialize, etc ctx.jobqueue.enqueue(jobs) ) let parallel (computations : seq<#cloud< T>>) : Cloud< T []> = cloud { let! runtime = Cloud.GetResource<IDistributionProvider> () let workflow = runtime.scheduleparallel computations return workflow } ScheduleParallel Cloud.Parallel MBrace.Azure Job

47

48

49 MBrace.Azure MBrace MBrace.Azure MBrace.Azure MBrace.Azure let azureconfiguration = { Configuration.Default with StorageConnectionString = mystorageconnectionstring ServiceBusConnectionString = myservicebusconnectionstring } let runtime = Runtime.GetHandle(azureConfiguration) MBrace.Azure MBrace.Azure

50 MBrace.Azure MBrace.Core MBrace.Azure Service MBrace.Azure runtime.getworkers() > Seq.head val it : WorkerRef = MBrace.Azure.WorkerRef {Id = 3d1dd41c a569de644dbb7d11 ; Hostname = RD00156D3A3723 ; Status = Running; Version = ; ActiveJobs = 4; MaxJobCount = 16; CPU = ; Memory = ; TotalMemory = ; NetworkUp = ; NetworkDown = ; HeartbeatTime = 21/06/ :21:32 +00:00; InitializationTime = 21/06/ :20:55 +00:00; ProcessId = 4012; ProcessName = mbrace.azureworker ; ProcessorCount = 8; AutoUpdate = false; Fault = null; ConfigurationId = MBrace.Azure.ConfigurationId; }

51 MBrace.Azure let ps = runtime.createprocess(cloud { return 42 }) val it : Process<int> = MBrace.Azure.Client.Process 1[System.Int32] {Id = 03656ac893674b629ec77c cc ; Status = Running; ActiveJobs = 1; CompletedJobs = 0; TotalJobs = 1; Completed = false; ExecutionTime = 00:00: ; InitializationTime = 21/06/ :46:13 +03:00; CancellationTokenSource = dfbb549d c96f66fa305e408a2; Name = ; Type = System.Int32;} ps.awaitresult() // 42 01aa02a Root 5.06 KiB Completed 00:00: eee Parallel (0,4) 9.55 KiB Completed 00:00: d33...0de Parallel (1,4) 9.55 KiB Completed 00:00: fb1bd Parallel (0,1) KiB Completed 00:00: b3f32e Parallel (1,1) KiB Completed 00:00: e5708e1...31b Parallel (2,4) 9.56 KiB Completed 00:00: f56160b...c3c Parallel (0,2) KiB Completed 00:00: ca6d Parallel (1,2) KiB Completed 00:00: df170d Parallel (2,2) KiB Completed 00:00: dae...ea0 Parallel (3,4) 9.56 KiB Completed 00:00: f7b e1 Parallel (0,3) KiB Completed 00:00: c691...c8c Parallel (1,3) KiB Completed 00:00: cab915...ef5 Parallel (2,3) KiB Completed 00:00: a4cba07...dc7 Parallel (3,3) KiB Completed 00:00: a562d Parallel (4,4) 9.57 KiB Completed 00:00: c78e...4c8 Parallel (0,4) KiB Completed 00:00: a78944c...38b Parallel (1,4) KiB Completed 00:00: c93cd Parallel (2,4) KiB Completed 00:00: a57daf...6ba Parallel (3,4) KiB Completed 00:00: ccfa0d...59e Parallel (4,4) KiB Completed 00:00:

52 NoRetry FaultException let ps = runtime.createprocess( [1..4] > List.map (fun i cloud { return i <> 2 exit 1 }) > Cloud.Parallel, faultpolicy = FaultPolicy.NoRetry) ps.awaitresult() MBrace.Core.FaultException: Fault exception when running job 071b96a cb c6fa6, faultcount 1 at Cloud.Parallel(seq<Cloud<Boolean» computations) End of stack trace from previous location where exception was thrown Stopped due to error MBrace.Azure MBrace.Azure

53

54

55 MBrace MBrace MBrace.Azure MBrace.Core MBrace.Azure MBrace MBrace.Core MBrace.Azure MBrace MBrace.Core MBrace MBrace MBrace.Azure MBrace

56

57 library/dd aspx mbraceproject/ service-bus/ final.pdf

58

Asynchronous Message Passing

Asynchronous Message Passing CITS 3242 Programming Paradigms Part III: Concurrent Programming Topic 15: Asynchronous Message Passing Message passing is an important alternative to shared memory concurrency. It avoids the issues related

More information

Asynchronous Computations

Asynchronous Computations CITS 3242 Programming Paradigms Part III: Concurrent Programming Topic 14: Asynchronous Computations Asynchronous computations are lightweight software threads supported by the runtime that are more efficient

More information

UriQuery query.add + query.tostring()

UriQuery query.add + query.tostring() Employee employee = Employees.CurrentItem as Employee; if (employee!= null) UriQuery query = new UriQuery(); query.add("id", employee.id); _regionmanager.requestnavigate(regionnames.tabregion, new Uri("EmployeeDetailsView"

More information

Building reactive services using functional programming. Rachel rachelree.se Jet tech.jet.

Building reactive services using functional programming. Rachel rachelree.se Jet tech.jet. Building reactive services using functional programming Rachel Reese @rachelreese rachelree.se Jet Technology @JetTechnology tech.jet.com Taking on Amazon! Launched July 22 Both Apple & Android named our

More information

COS 326 David Walker Princeton University

COS 326 David Walker Princeton University F# COS 326 David Walker Princeton University Slide credits: Material drawn from: hbps://fsharpforfunandprofit.com/posts/computahon-expressions-intro/ hbps://fsharpforfunandprofit.com/posts/concurrency-async-and-parallel/

More information

Syntax Matters: Writing abstract computations in F#

Syntax Matters: Writing abstract computations in F# Syntax Matters: Writing abstract computations in F# Tomas Petricek University of Cambridge Don Syme Microsoft Research Non-standard computations in various languages and F# C# 5.0 asynchronous methods

More information

Programovací jazyky F# a OCaml. Chapter 6. Sequence expressions and computation expressions (aka monads)

Programovací jazyky F# a OCaml. Chapter 6. Sequence expressions and computation expressions (aka monads) Programovací jazyky F# a OCaml Chapter 6. Sequence expressions and computation expressions (aka monads) Sequence expressions 1. (generating sequences) Sequence expressions» Lazily generated sequences of

More information

Recap: Functions as first-class values

Recap: Functions as first-class values Recap: Functions as first-class values Arguments, return values, bindings What are the benefits? Parameterized, similar functions (e.g. Testers) Creating, (Returning) Functions Iterator, Accumul, Reuse

More information

Some Advanced ML Features

Some Advanced ML Features Some Advanced ML Features Mooly Sagiv Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming University of Washington: Dan Grossman ML is small Small number of powerful constructs

More information

Index. Cambridge University Press Functional Programming Using F# Michael R. Hansen and Hans Rischel. Index.

Index. Cambridge University Press Functional Programming Using F# Michael R. Hansen and Hans Rischel. Index. (),23 (*,3 ->,3,32 *,11 *),3.[...], 27, 186 //,3 ///,3 ::, 71, 80 :=, 182 ;, 179 ;;,1 @, 79, 80 @"...",26 >,38,35

More information

Standard ML. Exceptions

Standard ML. Exceptions Standard ML Exceptions ML Exceptions.1 Exceptions The Need An extensive part of the code is error handling A function F can return a problem solution (like int) or fail to find the solution or find that

More information

Syntax Matters: Writing abstract computations in F#

Syntax Matters: Writing abstract computations in F# Syntax Matters: Writing abstract computations in F# Tomas Petricek 1, Don Syme 2 1 University of Cambridge, Cambridge, United Kingdom 2 Microsoft Research, Cambridge, United Kingdom tp322@cam.ac.uk, dsyme@microsoft.com

More information

Asynchronous Programming

Asynchronous Programming Asynchronous Programming Agenda Why async priogramming The Task abstraction Creating Tasks Passing data into tasks and retrieving results Cancellation Task dependency Task Scheduling 2 2 The Benefits of

More information

Threads and Continuations COS 320, David Walker

Threads and Continuations COS 320, David Walker Threads and Continuations COS 320, David Walker Concurrency Concurrency primitives are an important part of modern programming languages. Concurrency primitives allow programmers to avoid having to specify

More information

Call-by-name evaluation

Call-by-name evaluation Lecture IX Keywords: call-by-value, call-by-name, and call-by-need evaluation; lazy datatypes: sequences, streams, trees; lazy evaluation; sieve of Eratosthenes; breadth-first and depth-first traversals.

More information

10/18/18. Outline. Semantic Analysis. Two types of semantic rules. Syntax vs. Semantics. Static Semantics. Static Semantics.

10/18/18. Outline. Semantic Analysis. Two types of semantic rules. Syntax vs. Semantics. Static Semantics. Static Semantics. Outline Semantic Analysis In Text: Chapter 3 Static semantics Attribute grammars Dynamic semantics Operational semantics Denotational semantics N. Meng, S. Arthur 2 Syntax vs. Semantics Syntax concerns

More information

CSE341: Programming Languages Lecture 11 Type Inference. Dan Grossman Spring 2016

CSE341: Programming Languages Lecture 11 Type Inference. Dan Grossman Spring 2016 CSE341: Programming Languages Lecture 11 Type Inference Dan Grossman Spring 2016 Type-checking (Static) type-checking can reject a program before it runs to prevent the possibility of some errors A feature

More information

Programovací jazyky F# a OCaml. Chapter 5. Hiding recursion using function-as-values

Programovací jazyky F# a OCaml. Chapter 5. Hiding recursion using function-as-values Programovací jazyky F# a OCaml Chapter 5. Hiding recursion using function-as-values Hiding the recursive part» Writing recursive functions explicitly let rec sum list = match list with [] -> 0 x::xs ->

More information

Reference Cells. Example

Reference Cells. Example Introduction to Objective Caml Part 2 Stefan Wehr University of Freiburg. November 8, 2006 Remember: Variables are only names for values Can t asn to variables Solution: reference cells Constructor: ref

More information

Programs as data first-order functional language type checking

Programs as data first-order functional language type checking Programs as data first-order functional language type checking Copyright 2013-18, Peter Sestoft and Cesare Tinelli. Created by Cesare Tinelli at the University of Iowa from notes originally developed by

More information

List Functions, and Higher-Order Functions

List Functions, and Higher-Order Functions List Functions, and Higher-Order Functions Björn Lisper Dept. of Computer Science and Engineering Mälardalen University bjorn.lisper@mdh.se http://www.idt.mdh.se/ blr/ List Functions, and Higher-Order

More information

F# for Industrial Applications Worth a Try?

F# for Industrial Applications Worth a Try? F# for Industrial Applications Worth a Try? Jazoon TechDays 2015 Dr. Daniel Egloff Managing Director Microsoft MVP daniel.egloff@quantalea.net October 23, 2015 Who are we Software and solution provider

More information

Delegate.Sandbox: I/O side-effects safe computations in Prosa F#unctional Copenhageners Meetup Group (MF#K)

Delegate.Sandbox: I/O side-effects safe computations in Prosa F#unctional Copenhageners Meetup Group (MF#K) Delegate.Sandbox: I/O side-effects safe computations in F# @ Prosa 2015-09-29 F#unctional Copenhageners Meetup Group (MF#K) Overview About me F#unctional Copenhageners Meetup Group (MF#K) Delegate.Sandbox:

More information

Programs as data Parsing cont d; first-order functional language, type checking

Programs as data Parsing cont d; first-order functional language, type checking Programs as data Parsing cont d; first-order functional language, type checking Peter Sestoft Monday 2009-09-14 Plan for today Exercises week 2 Parsing: LR versus LL How does an LR parser work Hand-writing

More information

Functional Programming - 2. Higher Order Functions

Functional Programming - 2. Higher Order Functions Functional Programming - 2 Higher Order Functions Map on a list Apply Reductions: foldr, foldl Lexical scoping with let s Functional-11, CS5314, Sp16 BGRyder 1 Higher Order Functions Functions as 1st class

More information

Processes. OS Structure. OS Structure. Modes of Execution. Typical Functions of an OS Kernel. Non-Kernel OS. COMP755 Advanced Operating Systems

Processes. OS Structure. OS Structure. Modes of Execution. Typical Functions of an OS Kernel. Non-Kernel OS. COMP755 Advanced Operating Systems OS Structure Processes COMP755 Advanced Operating Systems An OS has many parts. The Kernel is the core of the OS. It controls the execution of the system. Many OS features run outside of the kernel, such

More information

Data Parallelism and Control-Flow

Data Parallelism and Control-Flow Data Parallelism and Control-Flow Unit 1.c 1 Acknowledgments Authored by Thomas Ball, MSR Redmond 9/20/2010 2 Recall Parallel.For A; Parallel.For(0, N, m: i => { B; } ); C; A m(0) m(1) m(n-1) C 3 Control

More information

CSE 130 [Winter 2014] Programming Languages

CSE 130 [Winter 2014] Programming Languages CSE 130 [Winter 2014] Programming Languages Introduction to OCaml (Continued) Ravi Chugh! Jan 14 Announcements HW #1 due Mon Jan 20 Post questions/discussion to Piazza Check Piazza for TA/Tutor lab hours

More information

CS3110 Spring 2016 Lecture 6: Modules

CS3110 Spring 2016 Lecture 6: Modules CS3110 Spring 2016 Lecture 6: Modules Modules are the O part of OCaml, influenced by objects in Java. We see the evolution: Classic ML, CambridgeML (CAML), and finally OCaml. David McQueen is writing the

More information

Begin at the beginning

Begin at the beginning Begin at the beginning Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set of

More information

About Me Sushant Bhatia, From India/Malawi, Work at Citation Technologies Inc, an Environmental Health & Safety company with Compliance

About Me Sushant Bhatia, From India/Malawi, Work at Citation Technologies Inc, an Environmental Health & Safety company with Compliance About Me Sushant Bhatia, From India/Malawi, Work at Citation Technologies Inc, an Environmental Health & Safety company with Compliance Why I chose to do this talk No one else was doing functional programming.

More information

More Examples. Lecture 24: More Scala. Higher-Order Functions. Control Structures

More Examples. Lecture 24: More Scala. Higher-Order Functions. Control Structures More Examples Lecture 24: More Scala CSC 131 Fall, 2014 Kim Bruce MyList, MyArrayList, SinglyLinkedList - Val vs var - Can create Array[T] (unlike Java), though need implicit ClassManifest - foreach(f)

More information

User-defined Functions. Conditional Expressions in Scheme

User-defined Functions. Conditional Expressions in Scheme User-defined Functions The list (lambda (args (body s to a function with (args as its argument list and (body as the function body. No quotes are needed for (args or (body. (lambda (x (+ x 1 s to the increment

More information

Iterators. Lecture 24: Iterators & Exceptions. Implementing Iterators. When Good Programs Go Bad! - where! Abstract over control structures (in Clu)!

Iterators. Lecture 24: Iterators & Exceptions. Implementing Iterators. When Good Programs Go Bad! - where! Abstract over control structures (in Clu)! Iterators Lecture 24: Iterators & Exceptions CSC 131 Fall, 2014 Kim Bruce Abstract over control structures (in Clu) - where for c : char in string_chars(s) do string_chars = iter (s : string) yields (char);

More information

Variables and Bindings

Variables and Bindings Net: Variables Variables and Bindings Q: How to use variables in ML? Q: How to assign to a variable? # let = 2+2;; val : int = 4 let = e;; Bind the value of epression e to the variable Variables and Bindings

More information

Chapter 5 Advanced Techniques in Functional Programming

Chapter 5 Advanced Techniques in Functional Programming Chapter 5 Advanced Techniques in Functional Programming Programming Languages and Paradigms J. Fenwick, B. Kurtz, C. Norris (to be published in 2012) Introduction In this chapter you will learn about Advanced

More information

Lectures 24 and 25: Scheduling; Introduction to Effects

Lectures 24 and 25: Scheduling; Introduction to Effects 15-150 Lectures 24 and 25: Scheduling; Introduction to Effects Lectures by Dan Licata April 12 and 17, 2011 1 Brent s Principle In lectures 17 and 18, we discussed cost graphs, which can be used to reason

More information

CMSC330. Objects, Functional Programming, and lambda calculus

CMSC330. Objects, Functional Programming, and lambda calculus CMSC330 Objects, Functional Programming, and lambda calculus 1 OOP vs. FP Object-oriented programming (OOP) Computation as interactions between objects Objects encapsulate mutable data (state) Accessed

More information

Option Values, Arrays, Sequences, and Lazy Evaluation

Option Values, Arrays, Sequences, and Lazy Evaluation Option Values, Arrays, Sequences, and Lazy Evaluation Björn Lisper School of Innovation, Design, and Engineering Mälardalen University bjorn.lisper@mdh.se http://www.idt.mdh.se/ blr/ Option Values, Arrays,

More information

CSE341 Spring 2016, Midterm Examination April 29, 2016

CSE341 Spring 2016, Midterm Examination April 29, 2016 CSE341 Spring 2016, Midterm Examination April 29, 2016 Please do not turn the page until 10:30. Rules: The exam is closed-book, closed-note, etc. except for one side of one 8.5x11in piece of paper. Please

More information

CITS 3242 Programming Paradigms Part II. Topic 10: Imperative Programming

CITS 3242 Programming Paradigms Part II. Topic 10: Imperative Programming CITS 3242 Programming Paradigms Part II Topic 10: Imperative Programming This topic covers the background and motivations for imperative programming, as well as the imperative constructs in F# - reference

More information

Recap from last time. Programming Languages. CSE 130 : Fall Lecture 3: Data Types. Put it together: a filter function

Recap from last time. Programming Languages. CSE 130 : Fall Lecture 3: Data Types. Put it together: a filter function CSE 130 : Fall 2011 Recap from last time Programming Languages Lecture 3: Data Types Ranjit Jhala UC San Diego 1 2 A shorthand for function binding Put it together: a filter function # let neg = fun f

More information

INF 212 ANALYSIS OF PROG. LANGS FUNCTION COMPOSITION. Instructors: Crista Lopes Copyright Instructors.

INF 212 ANALYSIS OF PROG. LANGS FUNCTION COMPOSITION. Instructors: Crista Lopes Copyright Instructors. INF 212 ANALYSIS OF PROG. LANGS FUNCTION COMPOSITION Instructors: Crista Lopes Copyright Instructors. Topics Recursion Higher-order functions Continuation-Passing Style Monads (take 1) Identity Monad Maybe

More information

OCaml. ML Flow. Complex types: Lists. Complex types: Lists. The PL for the discerning hacker. All elements must have same type.

OCaml. ML Flow. Complex types: Lists. Complex types: Lists. The PL for the discerning hacker. All elements must have same type. OCaml The PL for the discerning hacker. ML Flow Expressions (Syntax) Compile-time Static 1. Enter expression 2. ML infers a type Exec-time Dynamic Types 3. ML crunches expression down to a value 4. Value

More information

Tomas Petricek. F# Language Overview

Tomas Petricek. F# Language Overview Tomas Petricek F# Language Overview Master student of computer science at Charles University Prague Bachelor thesis on AJAX development with meta programming under Don Syme Microsoft C# MVP Numerous articles

More information

CSE341 Spring 2017, Midterm Examination April 28, 2017

CSE341 Spring 2017, Midterm Examination April 28, 2017 CSE341 Spring 2017, Midterm Examination April 28, 2017 Please do not turn the page until 12:30. Rules: The exam is closed-book, closed-note, etc. except for one side of one 8.5x11in piece of paper. Please

More information

CSE341 Autumn 2017, Midterm Examination October 30, 2017

CSE341 Autumn 2017, Midterm Examination October 30, 2017 CSE341 Autumn 2017, Midterm Examination October 30, 2017 Please do not turn the page until 2:30. Rules: The exam is closed-book, closed-note, etc. except for one side of one 8.5x11in piece of paper. Please

More information

Introduction to OCaml

Introduction to OCaml Fall 2018 Introduction to OCaml Yu Zhang Course web site: http://staff.ustc.edu.cn/~yuzhang/tpl References Learn X in Y Minutes Ocaml Real World OCaml Cornell CS 3110 Spring 2018 Data Structures and Functional

More information

Lecture 09: Data Abstraction ++ Parsing is the process of translating a sequence of characters (a string) into an abstract syntax tree.

Lecture 09: Data Abstraction ++ Parsing is the process of translating a sequence of characters (a string) into an abstract syntax tree. Lecture 09: Data Abstraction ++ Parsing Parsing is the process of translating a sequence of characters (a string) into an abstract syntax tree. program text Parser AST Processor Compilers (and some interpreters)

More information

CSE 130 Programming Languages. Lecture 3: Datatypes. Ranjit Jhala UC San Diego

CSE 130 Programming Languages. Lecture 3: Datatypes. Ranjit Jhala UC San Diego CSE 130 Programming Languages Lecture 3: Datatypes Ranjit Jhala UC San Diego News? PA #2 (coming tonight) Ocaml-top issues? Pleas post questions to Piazza Recap: ML s Holy Trinity Expressions (Syntax)

More information

COS 320. Compiling Techniques

COS 320. Compiling Techniques Topic 5: Types COS 320 Compiling Techniques Princeton University Spring 2016 Lennart Beringer 1 Types: potential benefits (I) 2 For programmers: help to eliminate common programming mistakes, particularly

More information

abstype 'a queue = q of 'a list with val Null = q([]) fun front(q(h::_)) = h fun rm(q(_::t)) = q(t) fun enter(v,q(l)) = q(rev(v::rev(l))) end

abstype 'a queue = q of 'a list with val Null = q([]) fun front(q(h::_)) = h fun rm(q(_::t)) = q(t) fun enter(v,q(l)) = q(rev(v::rev(l))) end Why are abstract data types useful? Because they hide an implementation of a type from a user, allowing implementation changes without any impact on user programs. Consider a simple implementation of queues:

More information

Programming Languages and Techniques (CIS120)

Programming Languages and Techniques (CIS120) Programming Languages and Techniques (CIS120) Lecture 11 February 5, 2018 Review: Abstract types Finite Maps Homework 3 due tomorrow at 11:59:59pm Announcements (Homework 4 is due Tuesday, 2/20, and won

More information

Interpreters. Prof. Clarkson Fall Today s music: Step by Step by New Kids on the Block

Interpreters. Prof. Clarkson Fall Today s music: Step by Step by New Kids on the Block Interpreters Prof. Clarkson Fall 2017 Today s music: Step by Step by New Kids on the Block Review Previously in 3110: functional programming modular programming data structures Today: new unit of course:

More information

Recap: ML s Holy Trinity

Recap: ML s Holy Trinity Recap: ML s Holy Trinity Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set

More information

Programming Languages

Programming Languages CSE 130 : Fall 2008 Programming Languages Lecture 2: A Crash Course in ML Ranjit Jhala UC San Diego News On webpage: Suggested HW #1, sample for Quiz #1 on Thu PA #1 (due next Fri 10/10) No make-up quizzes

More information

Programming Languages

Programming Languages CSE 130 : Winter 2013 Programming Languages Lecture 3: Crash Course, Datatypes Ranjit Jhala UC San Diego 1 Story So Far... Simple Expressions Branches Let-Bindings... Today: Finish Crash Course Datatypes

More information

Last time: generic programming

Last time: generic programming 1/ 55 Last time: generic programming val (=) : { D: DATA } D. t D. t bool 2/ 55 This time: monads etc., continued >>= effect E 3/ 55 Recap: monads, bind and let An imperative program let id =! counter

More information

A Quick introduction to F#

A Quick introduction to F# A Quick introduction to F# and my take on why functional programming matters Juhana Helovuo Atostek Oy 2014-11-10 Contents Atostek F# Why should I care, elaborated Easier to reason about Performance Safety

More information

Programming Languages

Programming Languages CSE 130: Spring 2010 Programming Languages Lecture 2: A Crash Course in ML Ranjit Jhala UC San Diego News On webpage: Suggested HW #1 PA #1 (due next Wed 4/9) Please post questions to WebCT Today: A crash

More information

CS 314 Principles of Programming Languages. Lecture 9

CS 314 Principles of Programming Languages. Lecture 9 CS 314 Principles of Programming Languages Lecture 9 Zheng Zhang Department of Computer Science Rutgers University Wednesday 5 th October, 2016 Zheng Zhang 1 CS@Rutgers University Class Information Homework

More information

OCaml Language Choices CMSC 330: Organization of Programming Languages

OCaml Language Choices CMSC 330: Organization of Programming Languages OCaml Language Choices CMSC 330: Organization of Programming Languages! Implicit or explicit declarations?! Explicit variables must be introduced with let before use! But you don t need to specify types

More information

Reactive programming, WinForms,.NET. Björn Dagerman

Reactive programming, WinForms,.NET. Björn Dagerman Reactive programming, WinForms,.NET Björn Dagerman Motivation - Troublesome for many students previous years - Most student solutions we see are imperative - Useful techniques when working with GUI s,

More information

CS 345. Exceptions. Vitaly Shmatikov. slide 1

CS 345. Exceptions. Vitaly Shmatikov. slide 1 CS 345 Exceptions Vitaly Shmatikov slide 1 Reading Assignment Mitchell, Chapter 8.2 slide 2 Exceptions: Structured Exit Terminate part of computation Jump out of construct Pass data as part of jump Return

More information

INF 102 CONCEPTS OF PROG. LANGS FUNCTIONAL COMPOSITION. Instructors: James Jones Copyright Instructors.

INF 102 CONCEPTS OF PROG. LANGS FUNCTIONAL COMPOSITION. Instructors: James Jones Copyright Instructors. INF 102 CONCEPTS OF PROG. LANGS FUNCTIONAL COMPOSITION Instructors: James Jones Copyright Instructors. Topics Recursion Higher-order functions Continuation-Passing Style Monads (take 1) Identity Monad

More information

CSE341 Section 3. Standard-Library Docs, First-Class Functions, & More

CSE341 Section 3. Standard-Library Docs, First-Class Functions, & More CSE341 Section 3 Standard-Library Docs, First-Class Functions, & More Adapted from slides by Daniel Snitkovskiy, Nick Mooney, Nicholas Shahan, Patrick Larson, and Dan Grossman Agenda 1. SML Docs Standard

More information

L3 Programming September 19, OCaml Cheatsheet

L3 Programming September 19, OCaml Cheatsheet OCaml Cheatsheet Note: this document comes from a previous course (by Sylvain Schimdt). The explanations of the OCaml syntax in this sheet are by no means intended to be complete or even sufficient; check

More information

LECTURE 16. Functional Programming

LECTURE 16. Functional Programming LECTURE 16 Functional Programming WHAT IS FUNCTIONAL PROGRAMMING? Functional programming defines the outputs of a program as a mathematical function of the inputs. Functional programming is a declarative

More information

Functional Programming. Pure Functional Programming

Functional Programming. Pure Functional Programming Functional Programming With examples in F# Pure Functional Programming Functional programming involves evaluating expressions rather than executing commands. Computation is largely performed by applying

More information

Racket: Macros. Advanced Functional Programming. Jean-Noël Monette. November 2013

Racket: Macros. Advanced Functional Programming. Jean-Noël Monette. November 2013 Racket: Macros Advanced Functional Programming Jean-Noël Monette November 2013 1 Today Macros pattern-based macros Hygiene Syntax objects and general macros Examples 2 Macros (According to the Racket Guide...)

More information

News. Programming Languages. Complex types: Lists. Recap: ML s Holy Trinity. CSE 130: Spring 2012

News. Programming Languages. Complex types: Lists. Recap: ML s Holy Trinity. CSE 130: Spring 2012 News CSE 130: Spring 2012 Programming Languages On webpage: Suggested HW #1 PA #1 (due next Fri 4/13) Lecture 2: A Crash Course in ML Please post questions to Piazza Ranjit Jhala UC San Diego Today: A

More information

Recap: ML s Holy Trinity. Story So Far... CSE 130 Programming Languages. Datatypes. A function is a value! Next: functions, but remember.

Recap: ML s Holy Trinity. Story So Far... CSE 130 Programming Languages. Datatypes. A function is a value! Next: functions, but remember. CSE 130 Programming Languages Recap: ML s Holy Trinity Expressions (Syntax) Exec-time Dynamic Values (Semantics) Datatypes Compile-time Static Types Ranjit Jhala UC San Diego 1. Programmer enters expression

More information

Managed Threading 1 Managed Threading Basics 3 Threads and Threading 5 Synchronizing Data for Multithreading 8 Foreground and Background Threads 11

Managed Threading 1 Managed Threading Basics 3 Threads and Threading 5 Synchronizing Data for Multithreading 8 Foreground and Background Threads 11 Managed Threading 1 Managed Threading Basics 3 Threads and Threading 5 Synchronizing Data for Multithreading 8 Foreground and Background Threads 11 Managed and Unmanaged Threading in Windows 12 Cancellation

More information

CSE 130 Programming Languages. Datatypes. Ranjit Jhala UC San Diego

CSE 130 Programming Languages. Datatypes. Ranjit Jhala UC San Diego CSE 130 Programming Languages Datatypes Ranjit Jhala UC San Diego Recap: ML s Holy Trinity Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression

More information

CSE341 Spring 2016, Midterm Examination April 29, 2016

CSE341 Spring 2016, Midterm Examination April 29, 2016 CSE341 Spring 2016, Midterm Examination April 29, 2016 Please do not turn the page until 10:30. Rules: The exam is closed-book, closed-note, etc. except for one side of one 8.5x11in piece of paper. Please

More information

CS Lectures 2-3. Introduction to OCaml. Polyvios Pratikakis

CS Lectures 2-3. Introduction to OCaml. Polyvios Pratikakis CS 490.40 Lectures 2-3 Introduction to OCaml Polyvios Pratikakis Based on slides by Jeff Foster History ML: Meta Language 1973, University of Edinburg Used to program search tactics in LCF theorem prover

More information

Programming Languages

Programming Languages CSE 130: Fall 2009 Programming Languages Lecture 2: A Crash Course in ML News On webpage: Suggested HW #1 PA #1 (due next Fri 10/9) Technical issues installing Ocaml - should be resolved soon! Ranjit Jhala

More information

Chapter 3 Linear Structures: Lists

Chapter 3 Linear Structures: Lists Plan Chapter 3 Linear Structures: Lists 1. Lists... 3.2 2. Basic operations... 3.4 3. Constructors and pattern matching... 3.5 4. Polymorphism... 3.8 5. Simple operations on lists... 3.11 6. Application:

More information

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming CMSC 330: Organization of Programming Languages OCaml Imperative Programming CMSC330 Fall 2017 1 So Far, Only Functional Programming We haven t given you any way so far to change something in memory All

More information

CSE341, Fall 2011, Midterm Examination October 31, 2011

CSE341, Fall 2011, Midterm Examination October 31, 2011 CSE341, Fall 2011, Midterm Examination October 31, 2011 Please do not turn the page until the bell rings. Rules: The exam is closed-book, closed-note, except for one side of one 8.5x11in piece of paper.

More information

CSE3322 Programming Languages and Implementation

CSE3322 Programming Languages and Implementation Monash University School of Computer Science & Software Engineering Exam 2005 CSE3322 Programming Languages and Implementation Total Time Allowed: 3 Hours 1. Reading time is of 10 minutes duration. 2.

More information

Programming in Standard ML: Continued

Programming in Standard ML: Continued Programming in Standard ML: Continued Specification and Verification with Higher-Order Logic Arnd Poetzsch-Heffter (Slides by Jens Brandt) Software Technology Group Fachbereich Informatik Technische Universität

More information

Programmiersprachen (Programming Languages)

Programmiersprachen (Programming Languages) 2016-05-13 Preface Programmiersprachen (Programming Languages) coordinates: lecturer: web: usable for: requirements: No. 185.208, VU, 3 ECTS Franz Puntigam http://www.complang.tuwien.ac.at/franz/ps.html

More information

CSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Winter 2013

CSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Winter 2013 CSE341: Programming Languages Lecture 9 Function-Closure Idioms Dan Grossman Winter 2013 More idioms We know the rule for lexical scope and function closures Now what is it good for A partial but wide-ranging

More information

Hard deadline: 3/28/15 1:00pm. Using software development tools like source control. Understanding the environment model and type inference.

Hard deadline: 3/28/15 1:00pm. Using software development tools like source control. Understanding the environment model and type inference. CS 3110 Spring 2015 Problem Set 3 Version 0 (last modified March 12, 2015) Soft deadline: 3/26/15 11:59pm Hard deadline: 3/28/15 1:00pm Overview In this assignment you will implement several functions

More information

"Object Oriented" Programming using ML

Object Oriented Programming using ML "Object Oriented" Programming using ML Stavros Aronis (based on slides by Kostis Sagonas) http://courses.softlab.ntua.gr/pl1/2008a/slides/lecture-13-bw.pdf OOP Terminology Class Inheritance Encapsulation

More information

Chapter 3 Linear Structures: Lists

Chapter 3 Linear Structures: Lists Plan Chapter 3 Linear Structures: Lists 1. Two constructors for lists... 3.2 2. Lists... 3.3 3. Basic operations... 3.5 4. Constructors and pattern matching... 3.6 5. Simple operations on lists... 3.9

More information

Standard ML. Data types. ML Datatypes.1

Standard ML. Data types. ML Datatypes.1 Standard ML Data types ML Datatypes.1 Concrete Datatypes The datatype declaration creates new types These are concrete data types, not abstract Concrete datatypes can be inspected - constructed and taken

More information

Principles of Functional Programming

Principles of Functional Programming 15-150 Principles of Functional Programming Some Slides for Lecture 16 Modules March 20, 2018 Michael Erdmann Signatures & Structures A signature specifies an interface. A structure provides an implementation.

More information

Introduction to ML. Mooly Sagiv. Cornell CS 3110 Data Structures and Functional Programming

Introduction to ML. Mooly Sagiv. Cornell CS 3110 Data Structures and Functional Programming Introduction to ML Mooly Sagiv Cornell CS 3110 Data Structures and Functional Programming The ML Programming Language General purpose programming language designed by Robin Milner in 1970 Meta Language

More information

NOTE: Answer ANY FOUR of the following 6 sections:

NOTE: Answer ANY FOUR of the following 6 sections: A-PDF MERGER DEMO Philadelphia University Lecturer: Dr. Nadia Y. Yousif Coordinator: Dr. Nadia Y. Yousif Internal Examiner: Dr. Raad Fadhel Examination Paper... Programming Languages Paradigms (750321)

More information

CS:3820 Programming Language Concepts

CS:3820 Programming Language Concepts CS:3820 Programming Language Concepts Imperative languages, environment and store, micro-c Copyright 2013-18, Peter Sestoft and Cesare Tinelli. Created by Cesare Tinelli at the University of Iowa from

More information

News. CSE 130: Programming Languages. Environments & Closures. Functions are first-class values. Recap: Functions as first-class values

News. CSE 130: Programming Languages. Environments & Closures. Functions are first-class values. Recap: Functions as first-class values CSE 130: Programming Languages Environments & Closures News PA 3 due THIS Friday (5/1) Midterm NEXT Friday (5/8) Ranjit Jhala UC San Diego Recap: Functions as first-class values Arguments, return values,

More information

F# - LISTS. In this method, you just specify a semicolon-delimited sequence of values in square brackets. For example

F# - LISTS. In this method, you just specify a semicolon-delimited sequence of values in square brackets. For example http://www.tutorialspoint.com/fsharp/fsharp_lists.htm F# - LISTS Copyright tutorialspoint.com In F#, a list is an ordered, immutable series of elements of the same type. It is to some extent equivalent

More information

ML Type Inference and Unification. Arlen Cox

ML Type Inference and Unification. Arlen Cox ML Type Inference and Unification Arlen Cox Research Goals Easy to use, high performance parallel programming Primary contributions in backend and runtime Need a front end to target backend ML offers ease

More information

Implemen'ng a Func'onal Language. A Basic Func2onal Language. Goal: illustrate and understand the features of the run-2me support

Implemen'ng a Func'onal Language. A Basic Func2onal Language. Goal: illustrate and understand the features of the run-2me support Implemen'ng a Func'onal Language 1 A Basic Func2onal Language Goal: illustrate and understand the features of the run-2me support 2 1 Environment Environments record what value is associated with a given

More information

Control of Flow. There are several Python expressions that control the flow of a program. All of them make use of Boolean conditional tests.

Control of Flow. There are several Python expressions that control the flow of a program. All of them make use of Boolean conditional tests. Control of Flow There are several Python expressions that control the flow of a program. All of them make use of Boolean conditional tests. If Statements While Loops Assert Statements 6 If Statements if

More information

02157 Functional Programming. Michael R. Ha. Lecture 3: Programming as a model-based activity. Michael R. Hansen

02157 Functional Programming. Michael R. Ha. Lecture 3: Programming as a model-based activity. Michael R. Hansen Lecture 3: as a model-based activity nsen 1 DTU Compute, Technical University of Denmark Lecture 3: as a model-based activity MRH 20/09/2018 Overview RECAP Higher-order functions (lists) Type inference

More information

Learning F# and the Functional Point of View. Robert Pickering, LexiFi

Learning F# and the Functional Point of View. Robert Pickering, LexiFi Learning F# and the Functional Point of View Robert Pickering, LexiFi http://strangelights.com Session Objectives Why was F# created? Why learn F#? A taste of the F# language Especially the functional

More information

CSE 130, Fall 2006: Final Examination

CSE 130, Fall 2006: Final Examination CSE 130, Fall 2006: Final Examination Name: ID: Instructions, etc. 1. Write your answers in the space provided. 2. Wherever it says explain, write no more than three lines as explanation. The rest will

More information