2016-05-23 3 views
2

Как работают алгебраические типы данных в f #? Я хочу увидеть базовую примерную программу, чтобы объяснить ее, но, похоже, не может ее найти.Использование алгебраических типов данных для F # для решения задач алгебры

Например, может быть, код, который использует квадратичную формулу или решения для поиска областей фигур.

+1

Что значит? –

+0

http://tomasp.net/blog/types-and-math.aspx –

ответ

9

Прилагательное algebraic в algebraic data types не относится к типу, используемому для решения проблемы алгебры, например.

x + y = 3 or 5 * y = 10 

прилагательное algebraic относится к способу типа построены/объявлены с использованием algebraic операторы умножения (*) и сложения (+). В частности, алгебраические типы могут быть product types (*), которые являются кортежами, например.

type Variable = string * int 

и sum types, которые используют или символ (|) вместо символа плюс (+), которые различаются, например, ассоциации

type Term = 
    | Var of Variable 
    | Const of Constant 
    | App of Constant * Term list 

После того, как один понимает, что и сдвигает их мышления статьи Википедии на algebraic data types должен иметь смысл, и это объясняет, почему вы не найти то, что вы ищете, например, статьи, которые объясняют, как решать проблемы алгебры с использованием алгебраических типов данных.

В сущности новых типов строятся из primitive data types, таких как int, char, string и т.д., и алгебраических операторов product и summation, но что более важно, основаны алгебраические типы данных на type theory и будучи formal system принести со всем этим преимущества формальной системы.

Также следует отметить разницу в операторах для объявления типа кортежа и операторов, используемых для создания значения кортежа, например.

type Variable = string * int type 
("x",0)       value 

Обратите внимание на * оператор типа и , оператор для значения.

Также

type Term =       type 
    | Var of Variable 
    | Const of Constant 
    | App of Constant * Term list 

Var("x",0)       value 
Const("1")       value 
App("add",[Const("1"),Var("x",0)]) value 

обратите внимание, что каждый possible option должен иметь case identifier при использовании значения.

Как вы узнали больше об ADT, вы столкнетесь с generalized algebraic data type, но, к сожалению, F # их не имеет, но были requested.

Mark Seemann предоставил ссылку на Power of mathematics - Reasoning about functional types от Tomas Petricek. Tomas то есть неработающая ссылка fairly readable introduction но здесь это или что-то подобное: What the Heck are Algebraic Data Types? (for Programmers) или серия, которые я предпочитаю Крис Тейлор, который использует Haskell, но идеи не перевести на F #:

The Algebra of Algebraic Data Types, Part 1
The Algebra of Algebraic Data Types, Part 2
The Algebra of Algebraic Data Types, Part 3

+0

Итак, в основном, F # - это просто функциональный язык программирования, подобный Pyret? –

+1

Это первое, что я слышал о [Pyret] (https://www.pyret.org/), но после быстрого ознакомления с вступительным параграфом я бы согласился, что они оба являются функциональными языками семейства [ML] (https://en.wikipedia.org/wiki/ML_(programming_language)), но я не мог найти ADT для Pyret, и что мало я читал о системе типов для Pyret, я бы не сказал, что перевод от одного к другому быть легкими из-за того, насколько различны системы типов. –

+0

Пока вы уже задали вопрос и получили ответ, этот комментарий заставляет меня поверить, что вы искали помощь с Pyret, но взяли Pyret близко к F # и пошли оттуда. Задавать новый вопрос о различиях между системами типов Pyret и F # было бы интересно, но я не знаю никого, включая меня, который мог бы ответить. –

Смежные вопросы