Compiler errors 学习F#并尝试理解语法

Compiler errors 学习F#并尝试理解语法,compiler-errors,f#,Compiler Errors,F#,我是新来的F#如果有人能向我解释这个错误,请 [4; 5; 2; 7] :: 3;; stdin(4,17):错误FS0001:此表达式应具有类型 “整数列表” 但这里有一种类型 “int”错误消息有点令人困惑,但编译器认为您试图做的是将consint列表转换为整数,这是不可能的 在F#中,:用于将左侧的元素添加到右侧的列表中。有关更多详细信息,请参阅。列表以F#单独链接,这意味着添加到前面很简单,但添加到末尾却不那么容易 要正确使用::,您应该将表达式倒置:3::[4;5;6;7]。这将产生[

我是新来的F#如果有人能向我解释这个错误,请

[4; 5; 2; 7] :: 3;; stdin(4,17):错误FS0001:此表达式应具有类型 “整数列表”
但这里有一种类型
“int”

错误消息有点令人困惑,但编译器认为您试图做的是将
cons
int列表转换为整数,这是不可能的

在F#中,
用于将左侧的元素添加到右侧的列表中。有关更多详细信息,请参阅。列表以F#单独链接,这意味着添加到前面很简单,但添加到末尾却不那么容易

要正确使用
::
,您应该将表达式倒置:
3::[4;5;6;7]
。这将产生
[3;4;5;6;7]

  • stdin(4,17):
    错误代码在第4行,char 17(您只报告有问题的行,可能是代码中的第4行。)
  • char 17指向
    3
    ——这是编译器抱怨的“表达式”的开头
  • 该表达式被推断为类型
    int
    (这是正确的)
  • 前面的表达式是
    int-list
    [4;5;2;7]
    )作为cons(
    )的项-前置到项类型的列表上-因此编译器推断并期望
    int-list
    的列表-即
    int-list-list
    ,也就是说,类似的东西可以工作:
    [4;5;2;7]:[[3]]
    这将产生
    [4;5;2;7];[3]
  • 因此,它期望在cons
    之后有一个
    int列表
    类型,但会看到一个
    int
    ,因此会出现错误消息
  • 猜测你可能来自C#背景,你可能想
    3::[4;5;2;7]
    ,这将产生
    [3;4;5;2;7]
    。现在项目类型是
    int
    ,项目类型列表是
    int list
    ,编译器很高兴