Язык FSharp: основы — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Ссылки для скачивания)
(Ссылки для скачивания)
 
(не показано 15 промежуточных версий 2 участников)
Строка 3: Строка 3:
 
===Ссылки для скачивания===
 
===Ссылки для скачивания===
  
Компилятор языка F# для Visual Studio 2008 следует скачать и установить [http://pascalabc.net/downloads/InstallFSharp.msi отсюда]. Установка занимает достаточно продолжительное время (3-4 минуты).
+
Материалы по языку можно почерпнуть [http://pascalabc.net/downloads/FS.zip здесь]
 +
 
 +
===Общая характеристика===
 +
Язык F# - функциональный язык программирования, разработанный фирмой Microsoft.
 +
 
 +
===Основные конструкции===
 +
==== Переменные, вывод====
 +
<source lang="fsharp">let x = 5
 +
let x' = 10
 +
printfn "%A %A" x x'
 +
</source>
 +
====Определение функций====
 +
<source lang="fsharp">let add x y = x + y
 +
printfn "%A" (add 2 3)</source>
  
Материалы по языку можно почерпнуть [http://pascalabc.net/downloads/FS.zip здесь]
+
====Сопоставление с образцом (pattern matching)====
 +
<source lang="fsharp">
 +
let MyFun x =
 +
    match x with
 +
    | 1 -> "единица"
 +
    | 2 -> "двойка"
 +
    | 3 -> "тройка"
 +
    | _ -> "остальное"
 +
</source>
 +
 
 +
При определении функции на нескольких строках текст со второй строки должен располагаться с отступом. Отступ задается пробелами, символы табуляции использовать нельзя. Первый разделитель | можно опускать:
  
===Примеры===
+
<source lang="fsharp_">
 +
let MyFun' x y=
 +
    match x,y with
 +
    1,1 | 1,2 -> 2
 +
    | 2,1 -> 3
 +
    | x,1 -> x+1
 +
    | x,y when y<=0 -> -1
 +
    | _ -> 666
 +
</source>
  
====Программа, вычисляющая n!====
+
====Определение рекурсивных функций====
<source lang="haskell">let rec fact n =  
+
<source lang="fsharp">let rec fact n =  
 
     match n with
 
     match n with
 
     | 0 -> 1
 
     | 0 -> 1
Строка 16: Строка 47:
 
printfn "%A" (fact 10)
 
printfn "%A" (fact 10)
 
</source>
 
</source>
 +
 +
====Использование вспомогательных локальных переменных в теле функций====
 +
<source lang="fsharp">
 +
let fun x y =
 +
    let a = x-y
 +
    let b = x + y
 +
    a * b
 +
</source>
 +
 +
====Определение операций====
 +
Бинарные операции представляют собой функции с двумя параметрами. Например, операция + может быть вызвана так:
 +
<source lang="fsharp">
 +
(+) 1 2
 +
</source>
 +
 +
Можно также дать имя уже введенной операции:
 +
<source lang="fsharp">
 +
let add = (+)
 +
 +
printfn "%A" (add 2 3)
 +
</source>
 +
 +
Можно ввести новую операцию:
 +
 +
<source lang="fsharp">
 +
let (<=>) a b =
 +
    (a+b)*(a-b)
 +
 +
printfn "%A" (2 <=> 3)
 +
</source>
 +
 +
Для определения операций можно использовать значки
 +
!$%&*+-./<=>?@^|~
 +
 +
====Определение процедуры====
 +
<source lang="fsharp">
 +
let proc()
 +
    printfn "Hello"
 +
 +
proc()
 +
</source>
 +
 +
====Определение и использование изменяемой переменной====
 +
В F# имеется возможность изменять переменные, для этого их надо объявить как mutable:
 +
<source lang="fsharp">
 +
let mutable x = 2
 +
printfn "%A" x
 +
 +
x<-x+1
 +
printfn "%A" x
 +
</source>
 +
 +
В качестве присваивания для них следует использовать оператор <-

Текущая версия на 10:01, 25 апреля 2012

Назад к заданиям курса "Платформа .NET"

Ссылки для скачивания

Материалы по языку можно почерпнуть здесь

Общая характеристика

Язык F# - функциональный язык программирования, разработанный фирмой Microsoft.

Основные конструкции

Переменные, вывод

let x = 5
let x' = 10
printfn "%A %A" x x'

Определение функций

let add x y = x + y
printfn "%A" (add 2 3)

Сопоставление с образцом (pattern matching)

let MyFun x = 
    match x with
    | 1 -> "единица"
    | 2 -> "двойка"
    | 3 -> "тройка"
    | _ -> "остальное"

При определении функции на нескольких строках текст со второй строки должен располагаться с отступом. Отступ задается пробелами, символы табуляции использовать нельзя. Первый разделитель | можно опускать:

let MyFun' x y=
    match x,y with
    1,1 | 1,2 -> 2
    | 2,1 -> 3
    | x,1 -> x+1
    | x,y when y<=0 -> -1
    | _ -> 666

Определение рекурсивных функций

let rec fact n = 
    match n with
    | 0 -> 1
    | n -> n*fact(n-1)
printfn "%A" (fact 10)

Использование вспомогательных локальных переменных в теле функций

let fun x y = 
    let a = x-y
    let b = x + y
    a * b

Определение операций

Бинарные операции представляют собой функции с двумя параметрами. Например, операция + может быть вызвана так:

(+) 1 2

Можно также дать имя уже введенной операции:

let add = (+)

printfn "%A" (add 2 3)

Можно ввести новую операцию:

let (<=>) a b = 
    (a+b)*(a-b)

printfn "%A" (2 <=> 3)

Для определения операций можно использовать значки

!$%&*+-./<=>?@^|~

Определение процедуры

let proc()
    printfn "Hello"

proc()

Определение и использование изменяемой переменной

В F# имеется возможность изменять переменные, для этого их надо объявить как mutable:

let mutable x = 2
printfn "%A" x

x<-x+1
printfn "%A" x

В качестве присваивания для них следует использовать оператор <-