标签: partial-functions

What exactly is meant by "partial function" in functional programming?

According to my understanding, partial functions are functions that we get by passing fewer parameters to a function than expected. For example, if this were directly valid in Python:

>>> def add(x,y):
...    return x+y
... 
>>> new_function = add(1)
>>> new_function(2)
3
Run Code Online (Sandbox Code Playgroud)

In the snippet above, new_function is a partial function. However, according to the Haskell Wiki, the definition of partial function is

A partial function is a function that is not defined for all possible arguments of …

python haskell functional-programming partial-application partial-functions

54
推荐指数
3
解决办法
4129
查看次数

在Haskell中,为什么非详尽模式不是编译时错误?

这是我在调用Haskell子字符串函数时为什么会得到"函数中的非详尽模式..."的后续内容

据我所知,使用-WallGHC可以警告不详尽的模式.我想知道在默认情况下没有使它成为编译时错误的原因是什么,因为它始终可以显式定义部分函数:

f :: [a] -> [b] -> Int
f [] _  = error "undefined for empty array"
f _ []  = error "undefined for empty array"
f (_:xs) (_:ys) = length xs + length ys
Run Code Online (Sandbox Code Playgroud)

问题不是针对GHC的.

是因为......

  • 没有人想强制执行Haskell编译器来执行这种分析?
  • 一个非详尽的模式搜索可以找到一些但不是所有的情况?
  • 部分定义的函数被认为是合法的,并且经常使用不足以强加上面显示的那种构造?如果是这种情况,你能解释一下为什么非详尽的模式是有帮助/合法的吗?

haskell functional-programming non-exhaustive-patterns partial-functions

29
推荐指数
2
解决办法
7817
查看次数

为什么要采取全面的功能

take (-1) [][].

在部分功能上更喜欢这个的原因是什么,即错误?

是否存在利用此属性的用例?

haskell partial-functions

10
推荐指数
2
解决办法
420
查看次数

Scala总函数作为部分函数

由于总函数是部分函数的特例,我想我应该能够在需要部分函数时返回函数.

例如,

def partial : PartialFunction[Any,Any] = any => any
Run Code Online (Sandbox Code Playgroud)

当然这种语法无法编译.我的问题是,是否可以这样做,如果是这样,我需要做什么才能使语法正确.

我知道我可以做到以下几点,但这只是一个过于好奇的问题

def partial : PartialFunction[Any,Any] = {
  case any => any
}
Run Code Online (Sandbox Code Playgroud)

scala partial-functions

9
推荐指数
1
解决办法
1536
查看次数

Scala Cons模式匹配如何确定List的头部和尾部?

如何在以下声明中确定头部和尾部:

 val head::tail = List(1,2,3,4);
 //head: 1  tail: List(2,3,4)
Run Code Online (Sandbox Code Playgroud)

不应该有一些代码将第一个元素提取为head并将尾部作为新List返回.我一直在梳理Scala标准库代码,但我找不到/理解这是怎么做的.

scala pattern-matching partial-functions

6
推荐指数
1
解决办法
1102
查看次数

Haskell 中的任何部分函数都可以转换为完整版本吗?

到目前为止,我已经看到了某些部分函数的许多“可能”版本,这些函数可能会导致 \xe2\x8a\xa5,例如readMaybeforreadlistToMaybefor head; 有时我想知道我们是否可以概括这个想法并制定这样一个函数,safe :: (a -> b) -> (a -> Maybe b)将任何部分函数转换为更安全的完整替代方案,该替代方案Nothing在原始函数中调用错误堆栈的任何实例上返回。到目前为止,我还没有找到实现此类safe功能的方法或类似类型的现有实现,我开始怀疑这个想法是否真正可行。

\n

haskell partial-functions

6
推荐指数
2
解决办法
268
查看次数

使用部分函数短路列表映射

所以,我把这个函数叫做tryMap,如下所示:

/// tryMap, with failure and success continuations.
let rec tryMapC : 'R -> ('U list -> 'R) -> ('T -> 'U option) -> ('T list) -> 'R =
    fun failure success mapping list -> 
        match list with
        | []         -> success []
        | head::tail -> 
            match mapping head with
            | None        -> failure
            | Some result -> 
                let success = (fun results -> result::results |> success)
                tryMapC failure success mapping tail

/// <summary>
/// Attempts to map a list …
Run Code Online (Sandbox Code Playgroud)

mapping f# list short-circuiting partial-functions

5
推荐指数
1
解决办法
387
查看次数

scanl1真的偏偏吗?

根据Haskell维基,scanl1功能是部分的.不过,我不明白输入结果是什么.对于列表函数,我习惯于问题输入是空列表(如for head)或无限列表(如for reverse).但是,scanl1似乎正确处理这两种类型的列表.这实际上是部分功能吗?如果是这样,那么输入的一个例子是什么?

haskell partial-functions

5
推荐指数
1
解决办法
71
查看次数

Scala在Haskell中的部分函数

Scala对部分函数有很好的支持,主要是因为在Scala中定义部分函数时它也isDefinedAt为它定义了一个函数.而且还Scala有orElseandThen功能与部分职能的工作.

Haskell确实通过简单地非详尽地定义函数来支持部分函数(尽管在Haskell社区中强烈建议不要使用它们).但是为了定义isDefinedAt函数,你必须使用某种异常处理,这是我无法弄清楚的.一旦isDefinedAt定义了函数,它就可以用于定义orElseandThen函数已经存在(.).

简而言之,我想定义一个函数,

isDefinedAt :: (a -> b) -> a -> Bool
isDefinedAt f x = -- returns True if f is defined at x else False
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何编写这样的功能.

注意,我可以定义一个带签名的函数

isDefinedAt :: (a -> b) -> a -> IO Bool
Run Code Online (Sandbox Code Playgroud)

对于通用b.但我想在共域中没有IO的功能.

关于Scala的部分函数的一篇很好的文章是 - 如何在Scala中创建和使用部分函数Alvin Alexander

haskell scala partial-functions

4
推荐指数
1
解决办法
196
查看次数

为什么使用变量可以使偏函数变得不那么偏?

我不明白为什么使用变量作为临时值会使部分函数不同:

val f1: PartialFunction[Option[Int], Int] = { b =>
  val i = identity(b)
  i match {
    case Some(res) => res
  }
}
val f2: PartialFunction[Option[Int], Int] = { b =>
  identity(b) match {
    case Some(res) => res
  }
}

f1.isDefinedAt(None)
f2.isDefinedAt(None)
Run Code Online (Sandbox Code Playgroud)

Scala 2.13.12 和 Scala 3.3.1 的结果是true/ 。false第一个版本显示匹配详尽性警告,第二个版本则没有。该代码无法使用 Scala 2.12.18 编译,错误出现在第一个版本中:

类型不匹配;

找到:选项[Int] => Int

必需:PartialFunction[Option[Int],Int]

第二个版本怎么比第一个版本更“偏颇”呢?

scala partialfunction partial-functions

4
推荐指数
1
解决办法
39
查看次数