простой код для поиска слова в строке - PullRequest
0 голосов
/ 03 апреля 2011

Я пробую этот код из книги, но получаю сообщение об ошибке. Может ли кто-нибудь мне помочь?

#if INTERACTIVE
#r "FSharp.PowerPack.dll";;
#r "FSharp.PowerPack.Compatibility.dll";;
#endif

open System
open System.IO
open System.Collections.Generic
open Microsoft.FSharp.Collections.Tagged

let str = "This is a string, try to break it buddy!\nfind!"

let isWord (words) = 
    let wordTable = Set.Create(words)
    fun w -> wordTable.Contains(w)

Для Set.Create компилятор говорит:

Существует несколько типов, называемых «Set», которые принимают разное количество общих параметров. Обеспечьте создание экземпляра типа для устранения неоднозначности разрешения типа, например, 'Set <_>'.

Что это значит?

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

Проблема в том, что есть два типа с именем Set: F # - один и один в PowerPack (на самом деле есть три типа, но это не имеет значения). В вашем случае тип F # Set будет работать нормально, поэтому вам не нужно помечать Set из PowerPack. Попробуйте следующий код:

open System

let str = "This is a string, try to break it buddy!\nfind!"

let isWord words = 
    let wordTable = new Set(words) // or you can use Set.ofArray words
    fun w -> wordTable.Contains(w)
0 голосов
/ 03 апреля 2011

Я думаю, вам следует попробовать что-то вроде

Set<string>.Create()

, чтобы определить типы данных, которые будут храниться в наборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...