F ΠΌΠΎΠ΄ΡƒΠ»ΡŒ x – Π“Ρ€Π°Ρ„ΠΈΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠœΠΎΠ΄ΡƒΠ»ΠΈ — F# | Microsoft Docs

  • ВрСмя чтСния: 5 ΠΌΠΈΠ½
  • Π‘ΠΎΠ°Π²Ρ‚ΠΎΡ€Ρ‹

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

Π’ контСкстС F# языка, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ β€” это Π³Ρ€ΡƒΠΏΠΏΠ° F# ΠΊΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ значСния, Ρ‚ΠΈΠΏΡ‹ ΠΈ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² F# ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.In the context of the F# language, a module is a grouping of F# code, such as values, types, and function values, in an F# program. Код группирования Π² модулях ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ связанный ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.Grouping code in modules helps keep related code together and helps avoid name conflicts in your program.

БинтаксисSyntax

// Top-level module declaration.
module [accessibility-modifier] [qualified-namespace.]module-name
declarations
// Local module declaration.
module [accessibility-modifier] module-name =
    declarations

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡRemarks

F# ΠœΠΎΠ΄ΡƒΠ»ΡŒ β€” это Π³Ρ€ΡƒΠΏΠΏΠ° F# ΠΊΠΎΠ΄ конструкций, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΡ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΠΎΠ΄Π° Π² do привязки.An F# module is a grouping of F# code constructs such as types, values, function values, and code in do bindings. Он рСализуСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰ΠΈΠΉ класс языковой срСды выполнСния (CLR), содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСскиС Ρ‡Π»Π΅Π½Ρ‹.It is implemented as a common language runtime (CLR) class that has only static members. БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° объявлСний ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π»ΠΈ вСсь Ρ„Π°ΠΉΠ» Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅: объявлСниС модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ объявлСниС локального модуля.There are two types of module declarations, depending on whether the whole file is included in the module: a top-level module declaration and a local module declaration. ОбъявлСниС модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня содСрТит вСсь Ρ„Π°ΠΉΠ» Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅.A top-level module declaration includes the whole file in the module. ОбъявлСниС модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ объявлСния Π² Ρ„Π°ΠΉΠ»Π΅.A top-level module declaration can appear only as the first declaration in a file.

Π’ синтаксисС объявлСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня модуля, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ пространств ΠΈΠΌΠ΅Π½, содСрТащСго ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.In the syntax for the top-level module declaration, the optional qualified-namespace is the sequence of nested namespace names that contains the module. Имя пространства ΠΈΠΌΠ΅Π½ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ.The qualified namespace does not have to be previously declared.

Π£ вас Π½Π΅Ρ‚ отступа объявлСния Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.You do not have to indent declarations in a top-level module. Π£ вас отступ для всСх объявлСний Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.You do have to indent all declarations in local modules. Π’ объявлСнии локального модуля Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ с отступом Π²Π½ΡƒΡ‚Ρ€ΠΈ объявлСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ этого модуля.In a local module declaration, only the declarations that are indented under that module declaration are part of the module.

Если Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ Π½Π΅ начинаСтся с объявлСния модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈΠ»ΠΈ объявлСниС пространства ΠΈΠΌΠ΅Π½, всС содСрТимоС Ρ„Π°ΠΉΠ»Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, становится Ρ‡Π°ΡΡ‚ΡŒΡŽ нСявно созданного модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ имя Ρ„Π°ΠΉΠ»Π°, Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ, ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.If a code file does not begin with a top-level module declaration or a namespace declaration, the whole contents of the file, including any local modules, becomes part of an implicitly created top-level module that has the same name as the file, without the extension, with the first letter converted to uppercase. НапримСр рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».For example, consider the following file.

// In the file program.fs.
let x = 40

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» компилируСтся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:This file would be compiled as if it were written in this manner:

module Program
let x = 40

Если Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ объявлСниС локального модуля для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ модуля.If you have multiple modules in a file, you must use a local module declaration for each module. Если ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пространство ΠΈΠΌΠ΅Π½, эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½.If an enclosing namespace is declared, these modules are part of the enclosing namespace. Если пространство ΠΈΠΌΠ΅Π½ Π½Π΅ объявлСн, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ становятся Ρ‡Π°ΡΡ‚ΡŒΡŽ нСявно созданного модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.If an enclosing namespace is not declared, the modules become part of the implicitly created top-level module. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π°, содСрТащий нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.The following code example shows a code file that contains multiple modules. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ нСявно создаСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня с ΠΈΠΌΠ΅Π½Π΅ΠΌ

Multiplemodules, ΠΈ MyModule1 ΠΈ MyModule2 Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² этого модуля.The compiler implicitly creates a top-level module named Multiplemodules, and MyModule1 and MyModule2 are nested in that top-level module.

// In the file multiplemodules.fs.
// MyModule1
module MyModule1 =
    // Indent all program elements within modules that are declared with an equal sign.
    let module1Value = 100

    let module1Function x =
        x + 10

// MyModule2
module MyModule2 =

    let module2Value = 121

    // Use a qualified name to access the function.
    // from MyModule1.
    let module2Function x =
        x * (MyModule1.module1Function module2Value)

Если Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ компиляции, ΠΈΠ»ΠΈ Ссли Π²Ρ‹ создаСтС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ объявлСниС пространства ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ модуля Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Ρ„Π°ΠΉΠ»Π°.If you have multiple files in a project or in a single compilation, or if you are building a library, you must include a namespace declaration or module declaration at the top of the file. F# ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрСдСляСт имя модуля нСявно ΠΏΡ€ΠΈ имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ компиляции, ΠΈ ΠΏΡ€ΠΈ создании прилоТСния.The F# compiler only determines a module name implicitly when there is only one file in a project or compilation command line, and you are creating an application.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…: public, private, internal.The accessibility-modifier can be one of the following: public, private, internal. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом.For more information, see Access Control. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” «public» (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ).The default is public.

Бсылки Π½Π° ΠΊΠΎΠ΄ Π² модуляхReferencing Code in Modules

ΠŸΡ€ΠΈ создании ссылки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΈΠΏΡ‹ ΠΈ значСния ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ модуля, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.When you reference functions, types, and values from another module, you must either use a qualified name or open the module. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ пространства ΠΈΠΌΠ΅Π½, модуля ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΡƒΠΆΠ½Ρ‹ΠΉ элСмСнт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.If you use a qualified name, you must specify the namespaces, the module, and the identifier for the program element you want. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (.), ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.You separate each part of the qualified path with a dot (.), as follows.

Namespace1.Namespace2.ModuleName.Identifier

МоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько пространств ΠΈΠΌΠ΅Π½ для упрощСния ΠΊΠΎΠ΄Π°.You can open the module or one or more of the namespaces to simplify the code. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ пространств ΠΈΠΌΠ΅Π½ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ объявлСния ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°: open ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово.For more information about opening namespaces and modules, see Import Declarations: The

open Keyword.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит вСсь ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.The following code example shows a top-level module that contains all the code up to the end of the file.

module Arithmetic

let add x y =
    x + y

let sub x y =
    x - y

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….To use this code from another file in the same project, you either use qualified names or you open the module before you use the functions, as shown in the following examples.

// Fully qualify the function name.
let result1 = Arithmetic.add 5 9
// Open the module.
open Arithmetic
let result2 = add 5 9

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈNested Modules

ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ.Modules can be nested. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ отступ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для указания, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π° Π½Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.Inner modules must be indented as far as outer module declarations to indicate that they are inner modules, not new modules. НапримСр Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.For example, compare the following two examples. ΠœΠΎΠ΄ΡƒΠ»ΡŒ

Z прСдставляСт собой Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.Module Z is an inner module in the following code.

module Y =
    let x = 1

    module Z =
        let z = 5

Но ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Z являСтся родствСнным ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Y Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.But module Z is a sibling to module Y in the following code.

module Y =
    let x = 1

module Z =
    let z = 5

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Z находится Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ отступа ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ объявлСниями Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Y.Module Z

is also a sibling module in the following code, because it is not indented as far as other declarations in module Y.

module Y =
        let x = 1

    module Z =
        let z = 5

НаконСц, Ссли внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ содСрТит объявлСний ΠΈ сразу ΠΆΠ΅ слСдуСт объявлСниС Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ объявлСния модуля являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, Π½ΠΎ, компилятор Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ модуля отобразится Π±Π΅Π· отступа farther Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.Finally, if the outer module has no declarations and is followed immediately by another module declaration, the new module declaration is assumed to be an inner module, but the compiler will warn you if the second module definition is not indented farther than the first.

// This code produces a warning, but treats Z as a inner module.
module Y =
module Z =
    let z = 5

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ отступ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.To eliminate the warning, indent the inner module.

module Y =
    module Z =
        let z = 5

Если трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вСсь ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся Π² ΠΎΠ΄ΠΈΠ½ внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ трСбуСтся Π·Π½Π°ΠΊ равСнства ΠΈ объявлСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ объявлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΎ внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ трСбуСтся ΠΈΠΌΠ΅Ρ‚ΡŒ отступ.If you want all the code in a file to be in a single outer module and you want inner modules, the outer module does not require the equal sign, and the declarations, including any inner module declarations, that will go in the outer module do not have to be indented. ОбъявлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ отступы.Declarations inside the inner module declarations do have to be indented. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС.The following code shows this case.

// The top-level module declaration can be omitted if the file is named
// TopLevel.fs or topLevel.fs, and the file is the only file in an
// application.
module TopLevel

let topLevelX = 5

module Inner1 =
    let inner1X = 1
module Inner2 =
    let inner2X = 5

РСкурсивныС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉRecursive modules

F#4.1, вводится понятиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… всС Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ ΠΊΠΎΠ΄Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎ рСкурсивныС.F# 4.1 introduces the notion of modules which allow for all contained code to be mutually recursive. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ module rec.This is done via module rec. ИспользованиС module rec ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трудности Π² Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ написания ΠΊΠΎΠ΄Π° Π² Π²Π·Π°ΠΈΠΌΠ½ΠΎ ссылочныС Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.Use of module rec can alleviate some pains in not being able to write mutually referential code between types and modules. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ этого:The following is an example of this:

module rec RecursiveModule =
    type Orientation = Up | Down
    type PeelState = Peeled | Unpeeled

    // This exception depends on the type below.
    exception DontSqueezeTheBananaException of Banana

    type BananaPeel() = class end

    type Banana(orientation : Orientation) =
        member val IsPeeled = false with get, set
        member val Orientation = orientation with get, set
        member val Sides: PeelState list = [ Unpeeled; Unpeeled; Unpeeled; Unpeeled] with get, set

        member self.Peel() = BananaHelpers.peel self // Note the dependency on the BananaHelpers module.
        member self.SqueezeJuiceOut() = raise (DontSqueezeTheBananaException self) // This member depends on the exception above.

    module BananaHelpers =
        let peel (b: Banana) =
            let flip (banana: Banana) =
                match banana.Orientation with
                | Up -> 
                    banana.Orientation <- Down
                    banana
                | Down -> banana

            let peelSides (banana: Banana) =
                banana.Sides
                |> List.map (function
                             | Unpeeled -> Peeled
                             | Peeled -> Peeled)

            match b.Orientation with
            | Up ->   b |> flip |> peelSides
            | Down -> b |> peelSides

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ DontSqueezeTheBananaException ΠΈ класс Banana ΠΎΠ±Π° ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ.Note that the exception DontSqueezeTheBananaException and the class Banana both refer to each other. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ BananaHelpers ΠΈ класс Banana Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ.Additionally, the module BananaHelpers and the class Banana also refer to each other. Π­Ρ‚ΠΎ Π½Π΅ позволяСт Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π² F# Если Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ rec ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово from RecursiveModule модуля.This would not be possible to express in F# if you removed the rec keyword from the RecursiveModule module.

Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π² пространства ΠΈΠΌΠ΅Π½ с F# 4.1.This capability is also possible in Namespaces with F# 4.1.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅See also

docs.microsoft.com

y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Π’Ρ‹ искали y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒ? На нашСм сайтС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° любой матСматичСский вопрос. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с описаниСм ΠΈ пояснСниями ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ с самой слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΈ y ΠΌΠΎΠ΄ΡƒΠ»ΡŒ f x, Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠœΡ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π²Π°ΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΊ домашним Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π°ΠΌ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊ ΠΏΠΎΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΡŽ Π² Π²ΡƒΠ·. И ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ запрос ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Π²Ρ‹ Π½Π΅ Π²Π²Π΅Π»ΠΈ — Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. НапримСр, Β«y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒΒ».

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… матСматичСских Π·Π°Π΄Π°Ρ‡, ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ΠΎΠ², ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСно Π² нашСй ΠΆΠΈΠ·Π½ΠΈ. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… расчСтах, ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π΅ сооруТСний ΠΈ Π΄Π°ΠΆΠ΅ спортС. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ использовал Π΅Ρ‰Π΅ Π² дрСвности ΠΈ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ возрастаСт. Однако сСйчас Π½Π°ΡƒΠΊΠ° Π½Π΅ стоит Π½Π° мСстС ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΏΠ»ΠΎΠ΄Π°ΠΌΠΈ Π΅Π΅ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒ,y ΠΌΠΎΠ΄ΡƒΠ»ΡŒ f x,ΠΌΠΎΠ΄ΡƒΠ»ΡŒ y Ρ€Π°Π²Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ x. На этой страницС Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ любой вопрос, Π² Ρ‚ΠΎΠΌ числС ΠΈ y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ Π² окошко ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Β«Ρ€Π΅ΡˆΠΈΡ‚ΡŒΒ» здСсь ΠΈΠ»ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΎΠΊΠ½ΠΎ Π²Π²ΠΎΠ΄Π° Π½ΠΈΠΆΠ΅ свой запрос (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ y Ρ€Π°Π²Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ x).

Π“Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Онлайн?

Π Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ y f x ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм сайтС https://pocketteacher.ru. БСсплатный ΠΎΠ½Π»Π°ΠΉΠ½ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Π·Π°Π΄Π°Ρ‡Ρƒ любой слоТности Π·Π° считанныС сСкунды. ВсС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ — это просто ввСсти свои Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Π΅. Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ввСсти Π²Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° нашСм сайтС. А Ссли Ρƒ вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ вопросы, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ‡Π°Ρ‚Π΅ снизу слСва Π½Π° этой страницС.

www.pocketteacher.ru

Modules (F#)

Β 

Бамая Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ докумСнтация ΠΏΠΎ Visual Studio 2017: ДокумСнтация ΠΏΠΎ Visual Studio 2017.

Π’ контСкстС языка F# ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прСдставляСт собой способ группирования ΠΊΠΎΠ΄Π° F#, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ F#. Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² модулях ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π΅ Ρ€Π°Π·Ρ€Ρ‹Π²Π°Ρ‚ΡŒ связанный ΠΊΠΎΠ΄ ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

// Top-level module declaration.   
module [accessibility-modifier] [qualified-namespace.]module-name  
declarations  
// Local module declaration.  
module [accessibility-modifier] module-name =  
   declarations  

ΠœΠΎΠ΄ΡƒΠ»ΡŒ F# β€” это Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ конструкций ΠΊΠΎΠ΄Π° F#, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠΎΠ², Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΠΎΠ΄Π° Π² привязках do. Он рСализуСтся Π² Π²ΠΈΠ΄Π΅ класса срСды CLR, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСскиС Ρ‡Π»Π΅Π½Ρ‹. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° объявлСний ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π»ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ„Π°ΠΉΠ» Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ: объявлСниС модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ объявлСниС локального модуля. ΠŸΡ€ΠΈ объявлСнии модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ОбъявлСниС модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ объявлСния Π² Ρ„Π°ΠΉΠ»Π΅.

Π’ синтаксисС объявлСния модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ qualified-namespace прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ пространств ΠΈΠΌΠ΅Π½, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя пространства ΠΈΠΌΠ΅Π½ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ отступы ΠΏΡ€ΠΈ объявлСнии модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π½Π΅ трСбуСтся. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ отступы ΠΏΡ€ΠΈ объявлСнии всСх Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈ объявлСнии локального модуля Ρ‡Π°ΡΡ‚ΡŒΡŽ модуля ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявлСния, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ с отступом Π²Π½ΡƒΡ‚Ρ€ΠΈ объявлСния самого модуля.

Если Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ Π½Π΅ начинаСтся с объявлСния модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈΠ»ΠΈ с объявлСния пространства ΠΈΠΌΠ΅Π½, всС содСрТимоС Ρ„Π°ΠΉΠ»Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, становится Ρ‡Π°ΡΡ‚ΡŒΡŽ нСявно созданного модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ записанным с прописной Π±ΡƒΠΊΠ²Ρ‹. НапримСр, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».

// In the file program.fs.
let x = 40

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ скомпилирован, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» записан Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅.

module Program
let x = 40

Если Π² Ρ„Π°ΠΉΠ»Π΅ имССтся нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… объявлСниС локального модуля. Если объявлСно пространство ΠΈΠΌΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ высокого уровня, эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ пространства ΠΈΠΌΠ΅Π½. Если пространство ΠΈΠΌΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ высокого уровня Π½Π΅ объявлСно, эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ становятся Ρ‡Π°ΡΡ‚ΡŒΡŽ нСявно созданного модуля Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ, содСрТащий нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ нСявным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ создаСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня с ΠΈΠΌΠ΅Π½Π΅ΠΌ Multiplemodules, Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ MyModule1 ΠΈ MyModule2 ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΡŒ этого модуля.

// In the file multiplemodules.fs.
// MyModule1
module MyModule1 =
    // Indent all program elements within modules that are declared with an equal sign.
    let module1Value = 100
  
    let module1Function x =
        x + 10
     
// MyModule2
module MyModule2 =
  
    let module2Value = 121
  
    // Use a qualified name to access the function.
    // from MyModule1.
    let module2Function x =
        x * (MyModule1.module1Function module2Value)

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ компиляции Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ построСнии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π° объявлСниС пространства ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ модуля. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ F# нСявно опрСдСляСт имя модуля Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ командная строка компиляции ΠΈ ΠΏΡ€ΠΈ этом создаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ accessibility-modifier: public, private ΠΈΠ»ΠΈ internal. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Access Control. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” «public» (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ).

ΠŸΡ€ΠΈ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ модуля Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠŸΡ€ΠΈ использовании ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ пространства ΠΈΠΌΠ΅Π½, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ элСмСнта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Части ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ (.), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

Namespace1.Namespace2.ModuleName.Identifier

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько пространств ΠΈΠΌΠ΅Π½. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ пространств ΠΈΠΌΠ΅Π½ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ОбъявлСния ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°: ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово open.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, содСрТащий вСсь ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»Π°.

module Arithmetic

let add x y =
    x + y
    
let sub x y =
    x - y

Для использования ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

// Fully qualify the function name.
let result1 = Arithmetic.add 5 9
// Open the module.
open Arithmetic
let result2 = add 5 9

ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ отступами ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅, Π° Π½Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Z являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°.

 module Y =
     let x = 1 
 
     module Z =
         let z = 5

Но ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Z находится Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Y Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°.

 module Y =
     let x = 1 

 module Z =
     let z = 5

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Z Ρ‚Π°ΠΊΠΆΠ΅ находится Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ отступа ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ объявлСниями Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Y.

 module Y =
         let x = 1

     module Z =
         let z = 5

НаконСц, Ссли внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ содСрТит объявлСний, ΠΈ сразу послС Π½Π΅Π³ΠΎ слСдуСт объявлСниС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ модуля, Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ считаСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, Π½ΠΎ компилятор Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ отступа ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ модуля.

 // This code produces a warning, but treats Z as a inner module.
 module Y =
 module Z =
     let z = 5

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ прСдупрСТдСния, ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с отступом.

 module Y =
     module Z =
         let z = 5

Если вСсь ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°ΠΊΠ° равСнства, Π° объявлСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ объявлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΎ внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ отступа. ОбъявлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ отступы. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

// The top-level module declaration can be omitted if the file is named
// TopLevel.fs or topLevel.fs, and the file is the only file in an
// application.
module TopLevel

let topLevelX = 5

module Inner1 =
    let inner1X = 1
module Inner2 =
    let inner2X = 5

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ языку F#
Namespaces

technet.microsoft.com

Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y=ΠΌΠΎΠ΄ΡƒΠ»ΡŒ x Π²ΠΈΠ΄ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°? ..

Π’Ρ€ΠΎΠ΄Π΅ ΠŸΡ€ΡΠΌΡ‹Π΅ симмСтричныС оси x

Π΄Π° симмСтричныС прямыС Π² Π²ΠΈΠ΄Π΅ Π³Π°Π»ΠΎΡ‡ΠΊΠΈ)

\ | / ———\|/———-&gt;x | Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ! ) Ρ‚ΠΎΠΊΠ° с осью ΠΎΠ₯ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Π΅Ρ‚ΡŒΡΡ, ΠΈ линия сплошная!

Названия Π½Π΅Ρ‚ Π½ΠΈ Ρƒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΈ Ρƒ Π΅Ρ‘ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, Π½ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ выглядит Π³Π°Π»ΠΎΡ‡ΠΊΠΎΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ (0,0) ΠΈ дальшС строится ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ (1,1) (2,2) (3,3) (-1,1) (-2,2) (-3,3) ΠΈ Ρ‚. Π΄.

Ρ‚Π΅Π±Π΅ сюда megaresheba.ru

ΠΊΠ°ΠΊ называСтся этот Π³Ρ€Π°Ρ„ΠΈΠΊ сам??

touch.otvet.mail.ru

Π“Π˜Π β€” построСниС Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ со Π·Π½Π°ΠΊΠΎΠΌ модуля / Sandbox / Habr

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π₯ΠΎΡ‚Π΅Π» Π±Ρ‹ сСгодня ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ‚Π΅ΠΌΡƒ, ΠΊΠ°ΠΊ построСниС Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ². ВСроятно Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ простыС Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ y=x^2 ΠΈΠ»ΠΈ y=1/x. А ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ со Π·Π½Π°ΠΊΠΎΠΌ модуля?

Π—Π°Π΄Π°Ρ‡Π° 1. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ y=|x| y=|x-1|.
РСшСниС. Π‘Ρ€Π°Π²Π½ΠΈΠΌ Π΅Π³ΠΎ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y=|x|.ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… x ΠΈΠΌΠ΅Π΅ΠΌ |x|=x. Π—Π½Π°Ρ‡ΠΈΡ‚, для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π³Ρ€Π°Ρ„ΠΈΠΊ y=|x| совпадаСт с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ y=x, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ эта Ρ‡Π°ΡΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° являСтся Π»ΡƒΡ‡Ρ‘ΠΌ, выходящим ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ΄ ΡƒΠ³Π»ΠΎΠΌ 45 градусов ΠΊ оси абсцисс. ΠŸΡ€ΠΈ x< 0 ΠΈΠΌΠ΅Π΅ΠΌ |x|= -x; Π·Π½Π°Ρ‡ΠΈΡ‚, для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… x Π³Ρ€Π°Ρ„ΠΈΠΊ y=|x| совпадаСт с биссСктрисой Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°.
Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… X) Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ, Ссли Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция y=|x| β€” чётная, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ |-a|=|a|. Π—Π½Π°Ρ‡ΠΈΡ‚, Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y=|x| симмСтричСн ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси Oy, ΠΈ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ приобрСсти, ΠΎΡ‚Ρ€Π°Π·ΠΈΠ² ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси ΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ, Π½Π°Ρ‡Π΅Ρ€Ρ‡Π΅Π½Π½ΡƒΡŽ для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… x. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Π³Ρ€Π°Ρ„ΠΈΠΊ:

y=|x|

Для построСния Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ (-2; 2) (-1; 1) (0; 0) (1; 1) (2; 2).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ y=|x-1|. Если А β€” Ρ‚ΠΎΡ‡ΠΊΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρƒ=|x| с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (a;|a|), Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° y=|x-1| с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Y Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠ° A1(a+1;|a|). (ΠŸΠΎΡ‡Π΅ΠΌΡƒ?) Π­Ρ‚Ρƒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ А(a;|a|) ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° сдвигом ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ оси Ox Π²ΠΏΡ€Π°Π²ΠΎ. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΈ вСсь Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y=|x-1|получаСтся ΠΈΠ· Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y=|x| сдвигом ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ оси Ox Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° 1.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ:

y=|x-1|

Для построСния Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ (-2; 3) (-1; 2) (0; 1) (1; 0) (2; 1).

Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠ°Ρ Π·Π°Π΄Π°Ρ‡ΠΊΠ°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π² уТас.

Π—Π°Π΄Π°Ρ‡Π° 2. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y=3*|x-4| β€” x + |x+1|.
РСшСниС. НайдСм Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ выраТСния ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π½ΡƒΠ»ΡŒ, Ρ‚.Π΅. Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «критичСскиС» Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…=-1 ΠΈ Ρ…=4. Π’ этих Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ выраТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ.

ΠŸΡƒΡΡ‚ΡŒ x<-1. Π’ΠΎΠ³Π΄Π° Ρ…+1<0, |x+1|=-x-1; x-4<0, |x-4|=-x+4; Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ y= 3(-Ρ…+4)-Ρ…+(-Ρ…-1)= -5Ρ…+11.
ΠŸΡƒΡΡ‚ΡŒ -1< = x < = 4. Π’ΠΎΠ³Π΄Π° Ρ…+1>0, |x+1|=x+1; x-4<0, |x-4|=-x+4; Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ y= 3(-Ρ…+4)-Ρ…+(Ρ…+1)= -3Ρ…+13.
ΠŸΡƒΡΡ‚ΡŒ Ρ…>4. Π’ΠΎΠ³Π΄Π° Ρ…+1>0, |x+1|=x+1, x-4>0; |x-4|=x-4; Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρƒ= 3(Ρ…-4)-Ρ…+Ρ…+1= 3Ρ…-11.

Π—Π½Π°Ρ‡ΠΈΡ‚, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½)
{ Ρƒ= -5Ρ…+11, ΠΏΡ€ΠΈ x<-1
{ y= -3Ρ…+13, ΠΏΡ€ΠΈ -1< = x < = 4.
{ y= 3Ρ…-11, ΠΏΡ€ΠΈ Ρ…>4

Для построСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ (1; 6) (2; 1)
Для построСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ (3; 4) (4; 1)
Для построСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ (3; -2) (4; 1)

Ну ΠΈ послСдняя Π½Π° сСгодня Π·Π°Π΄Π°Ρ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ.
Π—Π°Π΄Π°Ρ‡Π° 3. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y= |1/4 x^2 β€” |x| β€” 3|.
РСшСниС. Ѐункция y= |f(|x|)| чётная. НуТно ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ для x>=0 y= f(x) Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ симмСтрично ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси Oy(это Π³Ρ€Π°Ρ„ΠΈΠΊ y= |1/4 x^2 β€” x β€” 3|.), ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚Ρƒ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, которая располоТСна Π² Π½ΠΈΠΆΠ½Π΅ΠΉ полуплоскости, симмСтрично ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси Ox (y= 1/4 x^2 β€” |x| β€” 3.).
Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΠΉΠ΄Π΅Ρ‚:

y= |1/4 x^2 β€” |x| β€” 3|

Π˜Ρ‚Π°ΠΊ, всСм спасибо! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‚Ρƒ Π±Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² со Π·Π½Π°ΠΊΠΎΠΌ модуля! А Ρ‚ΠΎ Π΅Π³ΠΎ Ρ‚Π°ΠΊ всС боятся.

Π’ΠΎΡ‚ ссылка, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ваши построСния:

habr.com

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ Π½Π° Ρ‚Π΅ΠΌΡƒ: ΠœΠΎΠ΄ΡƒΠ»ΡŒ 10: ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Flash C28x

Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ TMS320F2812

Texas Instruments Incorporated

Β 

Основная Ρ€Π°Π±ΠΎΡ‚Π° с Flash

Β 

Flash упорядочСна Π² станицы ΠΏΠΎ 128 адрСсов

Β 

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°ΠΊΡ‚Ρ‹ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ

Β 

доступа Π²Π½ΡƒΡ‚Ρ€ΠΈ

Β 

страницы ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΏΠΎ страницам

Β 

OTP — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ

Β 

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ опрСдСлСния числа Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…

Β 

Ρ‚Π°ΠΊΡ‚ΠΎΠ²

Β 

сигнала SYSCLKOUT

Β 

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ «сброс» устанавливаСт максимальноС

Β 

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅!

Β 

Код настройки Flash Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΈΠ· Flash

Β 

памяти !

*** ΠΈΠ· руководства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ F281x ***

Для 150 ΠœΠ“Ρ†, PAGEWAIT = 5, RANDWAIT = 5, OTPWAIT = 8 Для 135 ΠœΠ“Ρ†, PAGEWAIT = 4, RANDWAIT = 4, OTPWAIT = 8

УскорСниС исполнСния ΠΊΠΎΠ΄Π° ΠΈΠ· Flash:

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Flash (для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΊΠΎΠ΄Π°

Ρ‚ΠΎΠ»ΡŒΠΊΠΎ)

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

16 ΠΈΠ»ΠΈ

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

64

Β 

Β 

Β 

32

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

64

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

битная

Β 

Β 

Β 

ΠœΠΎΠ΄ΡƒΠ»ΡŒ

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ°

Β 

Β 

Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

ядра C28x

Β 

Β 

Β 

Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°

Β 

2-Ρ…

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

выровнСнная

ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

ΠΏΠΎ 64 Π±ΠΈΡ‚Π°

ΠΉ Π±ΡƒΡ„Π΅Ρ€Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΎΠ³ΠΎ

Β 

Β 

Β 

Β 

Β 

Β 

Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ

Β 

Β 

Ρ€Π΅ΠΆΠΈΠΌΠ° Flash

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

0 = Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

1 = Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ

FOPT @ 0x00 0A80

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

15

Β 

Β 

Β 

Β 

Β 

Β 

Β 

1

Β 

0

Β 

Β 

Β 

Β 

Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ

Β 

Β 

Β 

Β 

ENPIPE

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

Β 

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ рСгистры ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

АдрСс

Имя

Flash

ОписаниС

0x00

0A80 FOPT

РСгистр ΠΎΠΏΡ†ΠΈΠΉ Flash

0x00

0A82 FPWR

РСгистр Ρ€Π΅ΠΆΠΈΠΌΠ° питания Flash

0x00

0A83 FSTATUS

РСгистр статуса Flash

0x00

0A84 FSTDBYWAIT

РСгистр оТидания ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Flash ΠΈΠ· спящСго

0x00

0A85 FACTIVEWAIT

Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания

Β 

РСгистр оТидания ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Flash ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ°

0x00

0A86 FBANKWAIT

оТидания Π² спящий

РСгистр оТидания доступа ΠΏΡ€ΠΈ Ρ†ΠΈΠΊΠ»Π°Ρ… чтСния Fla

0x00

0A87 FOTPWAIT

РСгистр оТидания доступа ΠΏΡ€ΠΈ Ρ†ΠΈΠΊΠ»Π°Ρ… чтСния OTP

FPWR: Для сохранСния элСктроэнСргии – ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Flash/OTP Π²

спящий ΠΈΠ»ΠΈ Ρ€Π΅ΠΆΠΈΠΌ оТидания; Flash автоматичСски вСрнСтся Π² Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ доступС Π² Flash/OTP

FSTATUS: Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ статуса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΠΆΠΈΠΌ

энСргосбСрСТСния)

FSTDBYWAIT: опрСдСляСт число Ρ†ΠΈΠΊΠ»ΠΎΠ² оТидания ΠΏΡ€ΠΈ

ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΈΠ· спящСго ΠΈΠ»ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° оТидания

FACTIVEWAIT: опрСдСляСт число Ρ†ΠΈΠΊΠ»ΠΎΠ² оТидания ΠΏΡ€ΠΈ

ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° оТидания Π² Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этих рСгистров часто сущСствСнны – смотритС β€œTMS320F28x DSP

System Control and Interrupts Reference Guide,” SPRU078, для получСния большСй 10 — 6

ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Flash

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов для программирования Flash:

Β 

Β 

Β 

Β 

Β 

Алгоритм

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

1.

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅

Установка всСх Π±ΠΈΡ‚ Π² ноль, Π·Π°Ρ‚Π΅ΠΌ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†

2.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π±ΠΈΡ‚ Π² ноль

3.

ВСрификация

ВСрификация содСрТимого flash

Β 

Β 

Β 

Β 

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ стираСмый Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…

-сСктор (4К слова / 8K слов / 16K слов)

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… – ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚!

Π’Π°ΠΆΠ½Ρ‹ΠΌ являСтся Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ элСктропитаниС Π²ΠΎ врСмя выполнСния шага стирания: Ссли CSM ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ,

CSM заблокируСтся навсСгда!

Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ происхоТдСния Π΄Π°Π½Π½ΠΎΠΉ ситуации ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»Π°!

(Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ выполняСтся сСктор Π·Π° сСктором)

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ программирования Flash

Code Composer Studio Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JTAG) *

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Flash ΠΎΡ‚ TI (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· SCI) *

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ программирования (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚

Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· GPIO)

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ своСй собствСнной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹

ИспользованиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· ΠŸΠ—Π£

Ρ‡Π΅ΠΌ SCI

ВстраиваниС ΠΊΠΎΠ΄Π° программирования flash Π²

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

API Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹* Доступнопрограммированияна сайтС TII:: www..tiiFlash..com 10 — 9

ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ TI

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Flash для Code Composer Studio

studfiles.net

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *