问题标签 [partial-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 如何将常量整数作为偏函数的输入?
我是 scala 的新手,我有一个用例,我想定义一个偏函数来添加三个数字,其中一个数字是常数,两个数字可以作为输入传递,并定义另一种可以将偏函数作为输入的方法和给出它的立方体作为结果。
scala - Odersky 书中的偏函数解释
在 Scala Odersky 书中,他有一个示例解释第 295 页的部分函数。它从这个函数开始:
因此,如果您将三元素列表而不是空列表传递给上述函数,则上述函数将成功。
有效但无效
上面会抛出一个MatchError: List
这是让我感到困惑的部分。奥德斯基写道:
如果您想检查是否定义了偏函数,您必须首先告诉编译器您知道您正在使用偏函数。
为什么我要检查是否定义了部分函数。什么是偏函数?它是仅适用于某些值的函数吗?
List[Int] => Int 类型包括从整数列表到整数的所有函数,无论这些函数是否是部分函数。仅包括从整数列表到整数的部分函数的类型写为 PartialFunction[List[Int], Int].
所以上面的函数返回了一个 List[Int] => Int 类型的函数,我看到了,但是为什么我们需要把这个函数改成 typePartialFunction[List[Int], Int]
呢?
这是重新定义的函数:
我真的不明白。有什么好处?为什么我们要检查是否定义了偏函数?那有什么意思?
scala - Scala 在 Haskell 中的部分函数
Scala 对偏函数有很好的支持,主要是因为在 Scala 中,当你定义一个偏函数时,它也isDefinedAt
为它定义了一个函数。Scala 也有orElse
和andThen
函数一起使用部分函数。
Haskell 确实通过简单地非详尽地定义一个函数来支持部分函数(尽管在 Haskell 社区中强烈反对它们)。但是要定义isDefinedAt
一般的函数,您必须使用某种异常处理,我无法弄清楚。一旦isDefinedAt
定义了函数,那么它就可以用来定义orElse
并且andThen
函数已经存在了(.)
。
总之,我想定义一个函数,
谁能告诉我如何编写这样的函数。
注意,我可以定义一个带有签名的函数
对于通用的b
. 但我想要一个没有 IO 在共同域中的功能。
关于 Scala 的 Partial Functions 的一篇不错的文章是 - How to create and use partial functions in Scala By Alvin Alexander
scala - 如何在 Scala 中使用另一个选项 getOrElse
假设我们有一个选项foo1
和一个选项foo2
:
是否有一个运算符/函数允许我返回foo2
when foo1
is的值None
?
以上getOrElseOption
显然不存在。我知道我们可以这样做,但它有点冗长且难以理解:
scala - PartialFunction 隐式参数
我有一个简单的 PartialFunction
但是当我尝试使用它时 - 编译器想要这样的声明:
如您所见,它不隐含地将 ctx 作为第二个参数
我如何更改我的 idMatch 函数以像这样使用它:
?
haskell - scanl1 真的是局部的吗?
根据 Haskell wiki,该scanl1
功能是部分的。不过,我不明白什么输入会导致底部。对于列表函数,我习惯于问题输入是空列表(如 for head
)或无限列表(如 for reverse
)。但是,scanl1
似乎可以正确处理这两种类型的列表。这实际上是一个偏函数吗?如果是这样,将导致底部的输入示例是什么?
scala - Scala function composition totalFn(partialFn(totalFn(x)))
I was trying to compose three functions with only the middle one being a PartialFunction. I would expect the resulting type to be PartialFunction as well.
Example:
However, calc
is not defined on the whole of its domain. It will throw MatchError for every number divisible by 10.
What is the reason for returning a total function when at least one of the functions in the composition is partial?
Another example where composition of partial functions results in another partial function with incorrect domain conditions:
I would expect the domain of calc
to be (-Infinity, -1] union [1, Infinity)
but calling calc.lift(0.5)
will throw a MathError instead of returning None
because the input is within the first function's domain.
Thanks, Norbert
haskell - 部分函数与输入验证
我真的很喜欢使用总功能。也就是说,有时我不确定保证这一点的最佳方法是什么。假设我正在编写一个类似于split 包中的chunksOf的函数,我想将一个列表拆分为给定大小的子列表。现在我真的宁愿说子列表大小的输入需要是一个正整数(所以不包括 0)。正如我所看到的,我有几个选择:
1)全力以赴:制作一个newtype
for PositiveInt
,隐藏构造函数,并且只公开用于创建 PositiveInt 的安全函数(可能返回一个Maybe
或一些联合Positive | Negative | Zero
或你有什么)。这似乎是一个巨大的麻烦。
2) split 包的作用:如果大小 <= 0,则返回一个大小为 0 的子列表的无限列表。这似乎是您冒着错误未被捕获的风险,更糟糕的是:这些错误只是无限地挂起您的程序而没有任何指示出错。
3)大多数其他语言所做的事情:error
当输入<= 0时。我真的更喜欢总函数......
4) 返回一个Either
orMaybe
以覆盖输入可能 <= 0 的情况。与 #1 类似,使用它似乎很麻烦。
这似乎与这篇文章相似,但这更多地与错误条件有关,而不仅仅是尽可能精确地确定类型。我正在寻找有关如何确定此类案例的最佳方法的想法。我可能最倾向于做#1,只是处理增加的开销,但我担心我会在路上踢自己。这是一个需要根据具体情况做出的决定,还是有一个始终如一的最佳策略?
python - 函数式编程中的“部分函数”到底是什么意思?
根据我的理解,偏函数是我们通过向函数传递的参数少于预期得到的函数。例如,如果这在 Python 中直接有效:
在上面的代码片段中,new_function
是一个偏函数。但是,根据Haskell Wiki,偏函数的定义是
偏函数是没有为指定类型的所有可能参数定义的函数。
所以,我的问题是:“部分功能”到底是什么意思?
scala - 为什么 Scala PartialFunction 没有定义 isDefinedAt 就可以工作?
看起来First和Second是一样的,但是为什么呢?
第一的
第二
是不是因为 Scala 编译器会自动转换
{ case i:Int if i > 0 && i < 3 => i }
为First的实现形式with generate isDefinedAt
from if i > 0 && i < 3
part?
另外,case i:Int if i > 0 && i < 3 => i
如果我是正确的,是 Case 类模式匹配。但是,在scala/src/library/scala/PartialFunction.scala中,没有 Case 类定义PartialFunction
。
那么为什么这个案例类模式匹配有效呢?
我想 Scala 编译器智能地做了很多隐式工作,但它让我无法理解正在发生的事情以及如何编写 Scala 代码。
如果有很好的参考资料,而不是语言或编译器规范,以了解 Scala 代码语法和 Scala 编写代码的方式,请提出建议。