Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1

Метка записи Suit не определена. Пример из книги не компилируется

15.08.2019, 23:27. Показов 6804. Ответов 1
Метки f# (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Читаю книгу про конкурентность и параллелизм в .NET, там примеры на F# и C#. Решил освоить F#.

Пишу пример из книги. Подчёркивает Suit в yield { Suit = suit; Rank = rank } .

Так как этот язык ломает мозг, потому что всё совершенно по другому; не так как в C#, C++ и даже Python (хоть он ближе всех к F# внешне и по некоторым конструкциям, по минимализму, как мне показалось на начальном этапе), то мне пока что сложно ориентироваться и неохота убивать кучу времени на поиски, а где же я что-то написал не так. Я пока поищу сам, но вдруг кто-то успеет раньше мне сказать, в чём проблема.

Что ему нужно?

F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Learn more about F# at http://fsharp.org
// https://docs.microsoft.com/ru-ru/dotnet/fsharp/language-reference/discriminated-unions
 
open System
 
let EXIT_SUCCESS = 0
 
// Размеченное объединение (Discriminated Union, DU) — это тип, представляющий собой набор значений, 
// относящийся к одному из нескольких четко определенных вариантов, каждый из которых может иметь 
// различные значения и типы. В объектно-ориентированной парадигме размеченное объединение можно 
// рассматривать как набор классов, унаследованных от общего базового класса. 
// В общем случае DU — это инструмент, используемый для построения сложных структур данных, 
// для создания моделей предметной области и для представления рекурсивных структур, 
// таких как тип данных Tree.
 
// В следующем коде представлены масть и достоинство игральной карты:
type Suit = Hearts | Clubs | Diamonds | Spades
 
type Rank =
    | Value of int
    | Ace
    | King
    | Queen
    | Jack
    static member GetAllRanks() = [ 
        yield Ace
        for i in 2 .. 10 do yield Value i
        yield Jack
        yield Queen
        yield King ]
 
// Как видим, размеченные объединения могут быть расширены посредством 
// свойств и методов. Список, представляющий все карты в колоде, может 
// быть вычислен следующим образом:
let fullDeck = [ 
    for suit in [ Hearts; Clubs; Diamonds; Spades] do
        for rank in Rank.GetAllRanks() do
            yield { Suit  = suit; Rank = rank } ]
 
 
// Приведенный ниже код объявляет фигуру размеченного объединения, которая может 
// иметь значения любого из трех вариантов: Rectangle, Circle и Prism. 
// Каждый вариант имеет другой набор полей. В Rectangle есть 
// два именованных поля типа float, которые имеют имена width и length. 
// В варианте Circle есть только одно именованное поле, radius. 
// В варианте Prism есть три поля, два из которых (width и height) называются полями. 
// Безымянные поля называются анонимными полями.
type Shape =
    | Rectangle of width : float * length : float
    | Circle of radius : float
    | Prism of width : float * float * height : float // Посередине анонимное поле
 
[<EntryPoint>]
let main argv =
 
    let rect = Rectangle(length = 1.3, width = 10.0)
    let circ = Circle (1.0)
    let prism = Prism(5., 2.0, height = 3.0)
 
 
    EXIT_SUCCESS
Самое интересное, что во всплывающей подсказке вполне себе показывает, что он знает такой тип.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.08.2019, 23:27
Ответы с готовыми решениями:

Пример с книги не компилируется!
Павловская Т.С. Пример (программа печатает таблицу значений функции г/=х2+1 во введенном диапазоне): ...

Не компилируется код-пример из книги
Здравствуйте. Читаю книгу &quot;Бланшет Ж., Саммерфилд М. Qt 4. Программирование GUI на C++ (2-е издание, 2008)&quot;. Есть вот такой...

Небезопасный код: пример из книги не компилируется
Учу с# по книге Шилдта, в разделе про небезопасный код есть примеры работы с указателями, однако данный код не компилируется в Visual...

1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
16.08.2019, 00:29  [ТС]
И ещё, похоже, let fullDeck нужно писать внутри let main?
Другими словами, я сначала подумал, что это функция

Добавлено через 45 минут
Разобрался. Это я возвращаю Record на каждой итерации, а этот самый Record нигде не объявлен. Объявил:
F#
1
type PlayingCard = { Suit : Suit; Rank : Rank }
Заработало. Вопрос решён.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2019, 00:29
Помогаю со студенческими работами здесь

Не компилируется пример из книги: Undefined reference
Добрый день. Переписал программу с книги, а она не компилируется. В чем может быть ошибка. Текст проги: #include &lt;stdio.h&gt; ...

Не компилируется пример с использованием boost из книги
Visual Studio 10, Windows 7. Решил попробовать использовать boost. Выбрал пример 10.19 чтения содержимого каталога из книги...

Собственные функции. Не компилируется код. Подскажите, почему не определена переменная?
Сообщение из консоли: version: 0.2 author: smile Вас приветствует виртуальный банк капитализация банка 10000000000 $ Владелец...

Не компилируется программа из книги
Переписал из книги первую простейшую программу для Win32 a simple message box #define WIN32_LEAN_AND_MEAN #include...

Не компилируется пример из libusb
Здравствуйте. Мне нужно подключить USB устройство. Для этого я использую библиотеку libusb. Для начала решил скомпилировать и запустить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru