If statement F#在if语句中使用布尔函数的结果

If statement F#在if语句中使用布尔函数的结果,if-statement,f#,functional-programming,If Statement,F#,Functional Programming,我想用F#写一个猪的拉丁翻译。要翻译,我需要知道一个单词是否以元音开头。为了做到这一点,我正在尝试使用我写的这个函数 (*Tests if an element is in a list*) let isInList elementToFind listToCheck = List.fold(fun a b -> a || b = elementToFind) false listToCheck; 测试单词中的第一个字符是否在所有元音的列表中。下面是我的尝试 (*Takes a

我想用F#写一个猪的拉丁翻译。要翻译,我需要知道一个单词是否以元音开头。为了做到这一点,我正在尝试使用我写的这个函数

(*Tests if an element is in a list*)
let isInList elementToFind listToCheck = 
    List.fold(fun a b -> a || b = elementToFind) false listToCheck;
测试单词中的第一个字符是否在所有元音的列表中。下面是我的尝试

(*Takes a word and translates it to pig latin*)
let translateWord wordToTranslate : string = 
    let startsWithVowel = isInList(wordToTranslate.[0], ['A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u']);
    if startsWithVowel then
        translateWordStartingWithVowel(wordToTranslate)
    else
        translateWordStartingWithConsenant(wordToTranslate);
这是给几个错误。它表示wordToTranslate。[0]没有足够的类型构造函数,并且开始时的元音类型错误。完整的错误文本是

Severity    Code    Description Project File    Line
Error       The operator 'expr.[idx]' has been used on an object of indeterminate type based on information prior to this program point. Consider adding further type constraints   Pig Latin FSharp

Severity    Code    Description Project File    Line
Error       This expression was expected to have type
    bool    
but here has type
    ('a * (char * char * char * char * char * char * char * char * char * char) list) list -> bool  Pig Latin FSharp

我如何修复此方法,使其达到我希望的效果?我对F#比较陌生,所以非常感谢您的帮助

类型注释中需要括号,否则它将应用于返回值,而不是参数:

let translateWord (wordToTranslate : string) = ...
isInList
函数传递参数时,不需要括号和逗号。要分离列表中的元素,请使用
而不是
用于分隔元组的元素)

这将修复编译错误

顺便说一句,以下内容更简洁、更快,并将为您提供相同的结果:

let startsWithVowel = Seq.contains wordToTranslate.[0] "AEIOUaeiou"

类型注释中需要括号,否则它将应用于返回值,而不是参数:

let translateWord (wordToTranslate : string) = ...
isInList
函数传递参数时,不需要括号和逗号。要分离列表中的元素,请使用
而不是
用于分隔元组的元素)

这将修复编译错误

顺便说一句,以下内容更简洁、更快,并将为您提供相同的结果:

let startsWithVowel = Seq.contains wordToTranslate.[0] "AEIOUaeiou"

类型注释中需要括号,否则它将应用于返回值,而不是参数:

let translateWord (wordToTranslate : string) = ...
isInList
函数传递参数时,不需要括号和逗号。要分离列表中的元素,请使用
而不是
用于分隔元组的元素)

这将修复编译错误

顺便说一句,以下内容更简洁、更快,并将为您提供相同的结果:

let startsWithVowel = Seq.contains wordToTranslate.[0] "AEIOUaeiou"

类型注释中需要括号,否则它将应用于返回值,而不是参数:

let translateWord (wordToTranslate : string) = ...
isInList
函数传递参数时,不需要括号和逗号。要分离列表中的元素,请使用
而不是
用于分隔元组的元素)

这将修复编译错误

顺便说一句,以下内容更简洁、更快,并将为您提供相同的结果:

let startsWithVowel = Seq.contains wordToTranslate.[0] "AEIOUaeiou"

@雅库布·洛茨是对的!我想补充一点,您可能希望养成这样做签名的习惯:
让isInList listToCheck elementToFind=
。当您开始通过curry将值管道化到类似这样的函数时,它将帮助您解决这个问题。e、 g.
['A';'C';'D']|>isInList['A','e','I','O','U','A','e','I','O','U']
@Jakub Lortz是正确的!我想补充一点,您可能希望养成这样做签名的习惯:
让isInList listToCheck elementToFind=
。当您开始通过curry将值管道化到类似这样的函数时,它将帮助您解决这个问题。e、 g.
['A';'C';'D']|>isInList['A','e','I','O','U','A','e','I','O','U']
@Jakub Lortz是正确的!我想补充一点,您可能希望养成这样做签名的习惯:
让isInList listToCheck elementToFind=
。当您开始通过curry将值管道化到类似这样的函数时,它将帮助您解决这个问题。e、 g.
['A';'C';'D']|>isInList['A','e','I','O','U','A','e','I','O','U']
@Jakub Lortz是正确的!我想补充一点,您可能希望养成这样做签名的习惯:
让isInList listToCheck elementToFind=
。当您开始通过curry将值管道化到类似这样的函数时,它将帮助您解决这个问题。e、 g.
['A';'C';'D']>isInList['A','e','I','O','U','A','e','I','O','U']
@Jakub Seq.包含什么?@RomanDibikhin在
Seq
模块中的一个函数,添加在F#4.0中。收集模块(
Array
Seq
List
)在F#4.0中进行了扩展和规范化。@Jakub what is Seq.包含@RomanDibikhin在F#4.0中添加的
Seq
模块中的函数。收集模块(
Array
Seq
List
)在F#4.0中进行了扩展和规范化。@Jakub what is Seq.包含@RomanDibikhin在F#4.0中添加的
Seq
模块中的函数。收集模块(
Array
Seq
List
)在F#4.0中进行了扩展和规范化。@Jakub what is Seq.包含@RomanDibikhin在F#4.0中添加的
Seq
模块中的函数。采集模块(
Array
Seq
List
)在F#4.0中进行了扩展和规范化。