在Haskell有一个背景我目前正在尝试熟悉Scala.
我在尝试将一个小的,可扩展的表达式语言从Haskell转换为Scala时遇到了一些问题.编写可用新数据变量和操作扩展的数据类型的基本问题通常称为表达式问题.
我在Haskell中的原始解决方案使用带有约束的类型类和实例声明.我的表达式的基础定义如下:
module Expr where
class Expr e where
eval :: e -> Integer
data Lit = Lit Integer
instance Expr Lit where
eval (Lit l) = l
data Plus a b = (Expr a, Expr b) => Plus a b
instance (Expr a, Expr b) => Expr (Plus a b) where
eval (Plus x y) = (eval x) + (eval y)
Run Code Online (Sandbox Code Playgroud)
然后,我有一个数据扩展,增加了乘法:
module ExprWithMul where
import Expr
data Mul a b = (Expr a, Expr b) …Run Code Online (Sandbox Code Playgroud) 今天使用的并发编程有很多范例和方法.软件事务内存,参与者,共享状态并发,元组空间等等.
然而,我发现缺少的是一个有趣的并发测试问题库.一个众所周知的例子是"餐饮哲学家问题",它既不复杂也不激励,也不现实.然后有许多并行算法(矩阵乘法,渲染,通用嵌套数据并行)只需要分配工作,但没有真正的并发与执行线程之间的通信.
那么,任何人都能指出一些有趣的问题需要在交互式,甚至是分布式环境中实现并发,这些问题很简单,可以用作并发范例的例子吗?理想情况下,我想找到一系列问题,作为并发范式的"缺乏测试"(或突出它们的差异,因为每个范例都有其优点和缺点).
任何帮助深表感谢 :)