我有以下F#代码
let Operation (l:int list) =
let A,B = l.[0], l.[1]
if A > B then (-)
else if A%2=0 && B%2=0 then (*)
else (-)
let m =
function
| [] -> []
| x::rest -> rest
let rec ops (l:int list) (opList:int->int->int list) =
let operation = Operation l
if l.Length = 0 then opList
else ops (m l) (operation::opList)
编译器在最后一行抱怨
该表达式应具有类型 'int-> int-> int list',但是这里有类型 ”列表”
它位于(operation::opList)
的基础上,但操作的类型为int -> int -> int
,而opList的类型为int->int->int list
。我在这里做什么错了?
答案 0 :(得分:3)
此
int->int->int list
等同于
int->int->(int list)
这是两个整数的函数,它返回一个整数列表。
你的意思是:
(int->int->int) list
这是两个返回一个int的int的函数的列表。
所以:
let Operation (l:int list) =
let A,B = l.[0], l.[1]
if A > B then (-)
else if A%2=0 && B%2=0 then (*)
else (-)
let m =
function
| [] -> []
| x::rest -> rest
let rec ops (l:int list) (opList:(int->int->int) list) =
let operation = Operation l
if l.Length = 0 then opList
else ops (m l) (operation::opList)