对 F# 方法签名语法感到困惑

mac*_*ian 3 f# functional-programming

我应该为大学作业用 F# 编写一个小程序。其中一个练习要求创建一个具有以下签名的过滤方法: filter : ('a -> bool) -> list<'a> -> list<'a>。但我很难正确解释这个语法。文档说创建方法的语法是 let [inline] function-name parameter-list [ : return-type ] = function-body. 但我的例子如何适应这个呢?它是一个不带参数但返回三个值的函数吗?

该函数应该过滤给定谓词的列表,这很简单,但如果它不带任何参数,我应该如何传递谓词和列表?我确信我错过了一些重要的事情,因为我无法理解它。

Mar*_*ann 5

您可能参考的文档告诉您如何实现功能。然而,您获得的签名是所需函数的type。F# 类型记录在此处:https ://learn.microsoft.com/dotnet/fsharp/language-reference/fsharp-types

具体来说,文档说,在最简单的形式中,函数的类型为parameter-type1 -> return-type,但是当它有更多参数时,它通常采用形式parameter-type1 -> parameter-type2 -> ... -> return-type

在 F# 中,函数就是值,因此所需的filter恰好是函数。该函数应采用两个输入:和,并返回类型为 的值。('a -> bool)list<'a>list<'a>

其中一个输入本身就是一个函数:('a -> bool)