F#:创建大小为 n 的列表时出错
F#: error creating a list of size n
我正在尝试创建一个大小为 n 的列表,从一个更大的、已创建的列表中拉取元素。
我收到一条错误消息:
此值不是函数,无法应用。
此表达式的不完整模式匹配。例如,值“[]”可能表示模式未涵盖的情况。在 7,16
谁能帮忙看看我做错了什么?此外,我正在尝试了解 F#,所以我真的不想要任何可以完成我要求的东西,除非它是 FYI 之类的东西。但我仍然需要帮助创建一个函数来执行此操作。
//create a list of size n from beginning of a dataset
let populateList n =
let starterList = []
let data = [1;2;3;4;5;6;7;8]
let rec helper count aList =
let head::tail = aList
if count < k then head :: helper count+1 tail else []
helper 0 data
populateList 3
运行 失败是因为:
head :: helper count+1 tail
因为函数调用的运算符优先级高于中缀 +
运算符,这被解释为:
head :: ((helper count) + (1 tail))
因为 1
不是一个函数,你在这里得到一个错误。
您可以通过添加括号来解决此问题:
head :: helper (count+1) tail
"Incomplete pattern matches" 警告不会阻止它 运行 宁,但它确实表明您应该解决的问题,因为它可能导致 运行 时间错误。
解决它的正确方法是使用模式匹配来覆盖所有可能的模式:
let rec helper count aList =
match aList with
| head::tail -> if count < n then head :: helper (count+1) tail else []
| [] -> []
这将确保您不会尝试将空列表拆分为头部和尾部。
因为这个函数现在 returns []
在基本情况和 aList
为空的情况下,您可以通过使用 when
和默认匹配条件:
let rec helper count aList =
match aList with
| head::tail when count < n -> head :: helper (count+1) tail
| _ -> []
我正在尝试创建一个大小为 n 的列表,从一个更大的、已创建的列表中拉取元素。 我收到一条错误消息: 此值不是函数,无法应用。 此表达式的不完整模式匹配。例如,值“[]”可能表示模式未涵盖的情况。在 7,16
谁能帮忙看看我做错了什么?此外,我正在尝试了解 F#,所以我真的不想要任何可以完成我要求的东西,除非它是 FYI 之类的东西。但我仍然需要帮助创建一个函数来执行此操作。
//create a list of size n from beginning of a dataset
let populateList n =
let starterList = []
let data = [1;2;3;4;5;6;7;8]
let rec helper count aList =
let head::tail = aList
if count < k then head :: helper count+1 tail else []
helper 0 data
populateList 3
运行 失败是因为:
head :: helper count+1 tail
因为函数调用的运算符优先级高于中缀 +
运算符,这被解释为:
head :: ((helper count) + (1 tail))
因为 1
不是一个函数,你在这里得到一个错误。
您可以通过添加括号来解决此问题:
head :: helper (count+1) tail
"Incomplete pattern matches" 警告不会阻止它 运行 宁,但它确实表明您应该解决的问题,因为它可能导致 运行 时间错误。
解决它的正确方法是使用模式匹配来覆盖所有可能的模式:
let rec helper count aList =
match aList with
| head::tail -> if count < n then head :: helper (count+1) tail else []
| [] -> []
这将确保您不会尝试将空列表拆分为头部和尾部。
因为这个函数现在 returns []
在基本情况和 aList
为空的情况下,您可以通过使用 when
和默认匹配条件:
let rec helper count aList =
match aList with
| head::tail when count < n -> head :: helper (count+1) tail
| _ -> []