1. Trang chủ
  2. » Mẫu Slide

OBJECT CAML FIRST ENCOUNTERS LOADING FROM FILES RECURSION IN OCAML TWO AT A BLOW

8 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow
Trường học Wellesley College
Chuyên ngành Computer Science
Thể loại Essay
Định dạng
Số trang 8
Dung lượng 206,05 KB

Nội dung

Công Nghệ Thông Tin, it, phầm mềm, website, web, mobile app, trí tuệ nhân tạo, blockchain, AI, machine learning - Công Nghệ Thông Tin, it, phầm mềm, website, web, mobile app, trí tuệ nhân tạo, blockchain, AI, machine learning - Khoa Học - Science Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Ocaml programming language An introduction Theory of Programming Languages Computer Science Department Wellesley College Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Table of contents Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Object Caml Ocaml is a dialect of ML (Meta-Language) designed by Robin Milner in 1975 for specifying theorem provers. ML is a strongly typed, functional language that uses type inference to infer types. Unlike Jave, the ML type system is polymorphic. Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Sound familar? Ocaml is very similar to the SML programming language we used in CS235. Most of the differences are in surface syntax. See http:www.mpi-sws.mpg.de rossbergsml-vs-ocaml.html for a side-by-side comparison of SML and Ocaml. (This is linked from the CS251 Resources page.) Best way to learn is to fire up emacs in Ocaml mode. See “Using Ocaml” for details. Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Ocaml in action 1 + 2;; 1 + 2 ;; let a = 3 + 4;; let a=3+4;; a a;; let dbl = fun x -> x 2;; dbl 10;; dbl (10);; (dbl 10);; dbl (dbl 10);; dbl dbl 10;; Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow More Ocaml (fun x -> x + 1) 10;; let inc x = x + 1;; inc 10;; let app5 f = f 5;; app5 inc;; app5 dbl;; let b = a 2;; let adda x = x + a;; adda 10;; let a = 42;; b;; adda 10;; Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Still more Ocaml let f n = if n > 10 then 2 n else n n;; f 20;; f 5;; let rec fact n = if n = 0 then 1 else n (fact (n-1));; fact 5;; fact 46;; fact 47;; let fact2 n = if n = 0 then 1 else n (fact2 (n-1));; Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Enough with the Ocaml already 1 = 1;; 2 = 3;; "foobar";; String.length "foobar";; String.get "foobar" 5;; "baz" ^ "quux" ^ (stringofint 17);; (2 3, 4 < 5, "foo" ^ "bar", String.get "baz" 2);; Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Swapping and stepping let swap (a,b) = (b,a);; swap (1+2,3=4);; swap(swap(1+2,3=4));; let step (a,b) = (a+b, ab);; step (1,2);; step (step (1,2));; let (x,y) = step (step (1,2)) in x+y;; Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow Dealing with longer functions It is tedious to type all declarations directly to the Ocaml interpreter, especially if your code is buggy and needs be retyped. Typing use "filename " evaluat...

Trang 1

Ocaml programming language

An introduction

Theory of Programming Languages Computer Science Department

Wellesley College

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Table of contents

Object Caml

First Encounters

Loading from Files

Recursion in Ocaml

Two at a Blow

Trang 2

Object Caml

Ocaml is a dialect of ML

(Meta-Language) designed

by Robin Milner in 1975 for

specifying theorem provers.

ML is a strongly typed,

functional language that

uses type inference to infer

types.

Unlike Jave, the ML type

system is polymorphic

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Sound familar?

Ocaml is very similar to the SML programming language we used in CS235.

Most of the differences are in surface syntax See

http://www.mpi-sws.mpg.de/ rossberg/sml-vs-ocaml.html

for a side-by-side comparison of SML and Ocaml (This is

linked from the CS251 Resources page.)

Best way to learn is to fire up emacs in Ocaml mode See

“Using Ocaml” for details.

Trang 3

Ocaml in action

# 1 + 2;;

# 1 + 2

;;

# let a = 3 + 4;;

# let a=3+4;;

# a * a;;

#

# let dbl = fun x -> x * 2;;

# dbl 10;;

# dbl (10);;

# (dbl 10);;

# dbl (dbl 10);;

# dbl dbl 10;;

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

More Ocaml

# (fun x -> x + 1) 10;;

# let inc x = x + 1;;

# inc 10;;

# let app5 f = f 5;;

# app5 inc;;

# app5 dbl;;

# let b = a * 2;;

# let adda x = x + a;;

# adda 10;;

# let a = 42;;

# b;;

# adda 10;;

Trang 4

Still more Ocaml

# let f n =

if n > 10 then

2 * n else

n * n;;

# f 20;;

# f 5;;

# let rec fact n =

if n = 0 then 1

else

n * (fact (n-1));;

# fact 5;;

# fact 46;;

# fact 47;;

# let fact2 n =

if n = 0 then 1

else

n * (fact2 (n-1));;

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Enough with the Ocaml already

# 1 = 1;;

# 2 = 3;;

# "foobar";;

# String.length "foobar";;

# String.get "foobar" 5;;

# "baz" ^ "quux" ^ (string_of_int 17);;

# (2 * 3, 4 < 5, "foo" ^ "bar", String.get "baz" 2);;

Trang 5

Swapping and stepping

# let swap (a,b) = (b,a);;

# swap (1+2,3=4);;

# swap(swap(1+2,3=4));;

#

# let step (a,b) = (a+b, a*b);;

# step (1,2);;

# step (step (1,2));;

# let (x,y) = step (step (1,2)) in x+y;;

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Dealing with longer functions

It is tedious to type all

declarations directly to the

Ocaml interpreter,

especially if your code is

buggy and needs be retyped.

Typing

#use "filename "

evaluates all of expressions

in the file, as if you had

typed them in by hand.

The #use directive can be

used within a file to load

other files.

Trang 6

For example

The file named FunTest.ml starts out as follows:

let a = 3 + 4;;

let dbl = fun x -> x * 2;;

let inc x = x + 1;;

let app5 f = f 5;;

let b = a * 2;;

let adda x = x + a;;

let a = 42;;

let f n = if n > 10

then 2 * n else n * n;;

let rec fact n =

if n = 0 then 1

else

n * (fact (n-1));;

let swap (a,b) = (b,a);;

let step (a,b) = (a + b, a*b);;

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Close encounters of the third kind

We load FunTest.ml into the interpreter using #use directive:

# #use "FunTest.ml";;

val a : int = 7

val dbl : int -> int = <fun>

val inc : int -> int = <fun>

val app5 : (int -> ’a) -> ’a = <fun>

val b : int = 14

val adda : int -> int = <fun>

val a : int = 42

val f : int -> int = <fun>

val fact : int -> int = <fun>

val swap : ’a * ’b -> ’b * ’a = <fun>

val step : int * int -> int * int = <fun>

val stepuntil : (int * int) * int -> int * int = <fun>

val print_pair : int * int -> unit = <fun>

val stepuntil : (int * int) * int -> int * int = <fun>

val sumDivisors : int -> int = <fun>

val numDivisors : int -> int = <fun>

val numAndSumDivisors : int -> int * int = <fun>

val avg1 : int * int -> int = <fun>

val avg2 : int -> int -> int = <fun>

Trang 7

Of particular interest in FunTest.ml

# let rec stepuntil ((a,b),limit) =

if a >= limit then

(a,b) else

stepuntil(step(a,b),limit);;

# stepuntil ((1,2), 100);;

# let print_pair (a,b) =

print_string ("(" ^ (string_of_int a) ^ ","

^ (string_of_int b) ^ ")\n");;

# let rec stepuntil ((a,b),limit) =

if a >= limit then

(a,b) else

(print_pair (a,b);

stepuntil(step(a,b),limit));;

# stepuntil ((1,2),100);;

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Divisors

# let sumDivisors n =

if n <= 0 then

0 else

let rec sum d =

if d == 0 then 0

else if (n mod d) == 0 then

d + sum (d-1) else

sum (d-1)

in sum (n-1);;

# sumDivisors 12;;

# let numDivisors n =

if n <= 0 then 0

else let rec sum d =

if d == 0 then 0

else if (n mod d) == 0 then

1 + sum (d-1) else

sum (d-1)

in sum (n-1);;

# numDivisors 12;;

Trang 8

Recursion with pairs

# let numAndSumDivisors n =

if n <= 0 then

(0,0) else

let rec sum d =

if d == 0 then (0,0)

else if (n mod d) == 0 then let (n,s) = sum (d-1)

in (1+n,d+s) else

sum (d-1)

in sum (n-1);;

# numAndSumDivisors 12;;

Object Caml First Encounters Loading from Files Recursion in Ocaml Two at a Blow

Two averages

# let avg1 (a,b) = (a+b)/2;;

# avg1 (10,20);;

# let avg2 a b = (a+b)/2;;

# avg2 10 20;;

# app5 (avg2 15);;

# app5 (fun x -> avg1(15,x));;

Ngày đăng: 08/06/2024, 14:24

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w