我在函数式编程和PLT圈子中多次听到过"enggebras"这个术语,特别是在讨论对象,comonads,镜头等时.谷歌搜索这个术语给出了对这些结构进行数学描述的页面,这对我来说几乎是不可理解的.任何人都可以解释一下代数在编程环境中的意义,它们的意义是什么,以及它们与对象和共同体的关系?
haskell functional-programming scala category-theory recursion-schemes
std::for_each过for循环有什么优点吗?对我来说,std::for_each似乎只是阻碍了代码的可读性.为什么有些编码标准推荐使用?
为什么Java不允许从静态初始化块中抛出已检查的异常?这个设计决定背后的原因是什么?
依赖方法类型以前曾是一个实验性功能,现在默认情况下已在中继中启用,显然这似乎在Scala社区中引起了一些兴奋.
初看起来,这并不是显而易见的.Heiko Seeberger在这里发布了一个简单的依赖方法类型示例,从评论中可以看出,可以很容易地在方法上使用类型参数进行复制.所以这不是一个非常引人注目的例子.(我可能会遗漏一些明显的东西.如果是这样,请纠正我.)
对于依赖方法类型的用例有哪些实用且有用的例子,它们明显优于替代方法?
我们可以用以前不可能/容易的事情做些什么有趣的事情?
他们通过现有的类型系统功能为我们买了什么?
此外,依赖方法类型是否类似于或从其他高级类型语言(如Haskell,OCaml)的类型系统中找到的任何功能中汲取灵感?
haskell type-systems programming-languages scala dependent-method-type
说我有以下两个case classes:
case class Address(street: String, city: String, state: String, zipCode: Int)
case class Person(firstName: String, lastName: String, address: Address)
Run Code Online (Sandbox Code Playgroud)
和以下Person类的实例:
val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg",
"Mumbai",
"Maharashtra",
411342))
Run Code Online (Sandbox Code Playgroud)
现在,如果我想更新zipCode,raj那么我将不得不做:
val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1))
Run Code Online (Sandbox Code Playgroud)
随着嵌套水平的提高,这将变得更加丑陋.是否有更清洁的方式(像Clojure的东西update-in)来更新这样的嵌套结构?
申请人撰写,monad没有.
上述陈述是什么意思?什么时候比其他人更好?
monads haskell functional-programming monad-transformers applicative
我无法理解Option[T]Scala中的课程要点.我的意思是,我不能看到任何advanages None了null.
例如,考虑代码:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设,该方法getPerson1返回null …
我是Scala程序员,现在正在学习Haskell.很容易找到OO概念的实际用例和现实世界的例子,例如装饰器,策略模式等.书籍和互联网都充满了它.
我开始意识到这在某种程度上不是功能概念的情况.例证:申请人.
我正在努力寻找应用程序的实际用例.到目前为止,我遇到的几乎所有教程和书籍都提供了[]和的示例Maybe.我希望应用程序比这更适用,看到他们在FP社区中得到的所有关注.
我认为我理解申请人的概念基础(也许我错了),而且我已经等待了很长一段时间的启蒙.但它似乎并没有发生.从来没有在编程的时候,我有一个时刻,我会高兴地喊,"尤里卡!我可以在这里使用应用程序!" (再次,除了[]和Maybe).
有人可以指导我如何在日常编程中使用应用程序吗?如何开始发现模式?谢谢!
在Scala中,代数数据类型被编码为sealed一级类型层次结构.例:
-- Haskell
data Positioning a = Append
| AppendIf (a -> Bool)
| Explicit ([a] -> [a])
Run Code Online (Sandbox Code Playgroud)
// Scala
sealed trait Positioning[A]
case object Append extends Positioning[Nothing]
case class AppendIf[A](condition: A => Boolean) extends Positioning[A]
case class Explicit[A](f: Seq[A] => Seq[A]) extends Positioning[A]
Run Code Online (Sandbox Code Playgroud)
随着case classES和case objectS,斯卡拉产生了一堆东西一样equals,hashCode,unapply(通过模式匹配使用)等这使我们的许多关键特性和传统的ADT功能.
但是有一个关键的区别 - 在Scala中,"数据构造函数"有自己的类型.比较以下两个例子(从相应的REPL复制).
// Scala
scala> :t Append
Append.type
scala> :t AppendIf[Int](Function const true)
AppendIf[Int]
-- Haskell
haskell> :t Append …Run Code Online (Sandbox Code Playgroud) scala ×7
haskell ×5
applicative ×2
java ×2
monads ×2
argonaut ×1
c++ ×1
case-class ×1
coding-style ×1
exception ×1
f# ×1
foreach ×1
null ×1
overloading ×1
stl ×1
type-systems ×1
zipper ×1