小编lam*_*tor的帖子

如何在Haskell中编写这个依赖类型的示例?

假设我想用常数c,一元函数符号f和谓词P来表示一阶语言的有限模型.我可以将载体表示为列表m,将常量表示为元素m,将函数表示为有序列表元素对m(可以通过辅助函数应用ap),谓词作为m满足它的元素列表:

-- Models (m, c, f, p) with element type a
type Model a = ([a], a, [(a,a)], [a])

-- helper function application, assumes function is total
ap :: Eq a => [(a,b)] -> a -> b
ap ((x',y'):ps) x = if x == x' then y' else ap ps x
Run Code Online (Sandbox Code Playgroud)

然后我可以在模型上构建特定的模型和操作.细节对于我的问题并不重要,只是类型(但我已经包含了定义,因此您可以看到类型约束的来源):

unitModel :: Model ()
unitModel = ([()], (), [((),())], [])

cyclicModel :: Int -> Model Int
cyclicModel n …
Run Code Online (Sandbox Code Playgroud)

haskell gadt dependent-type

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

在算子下计算闭包的高效函数算法

我对高效的函数算法感兴趣(最好是在Haskell中,更好的是已经实现为库的一部分!),用于计算一元运算符下容器的闭包.

对于列表,我想到的一个基本而低效的例子是:

closure :: Ord a => (a -> a) -> [a] -> [a]
closure f xs = first_dup (iterate (\xs -> nub $ sort $ xs ++ map f xs) xs) where
    first_dup (xs:ys:rest) = if xs == ys then xs else first_dup (ys:rest)
Run Code Online (Sandbox Code Playgroud)

更有效的实现保留了在每个阶段("边缘")生成的新元素的轨迹,并且不将该函数应用于已经应用它的元素:

closure' :: Ord a => (a -> a) -> [a] -> [a]
closure' f xs = stable (iterate close (xs, [])) where
    -- return list when it stabilizes, i.e., when fringe is empty
    stable …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell functional-programming

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

同步两个 CalDAV 服务器

简而言之,我正在 Ubuntu/Linux 上寻找一种解决方案,该解决方案允许我保持两个日历同步,每个日历均由具有 Web 界面的远程 CalDAV 服务器管理,从某种意义上说,我对其中一个日历所做的任何更改通过其 Web 界面将以最小的延迟传播到另一个。每个网络界面都允许我订阅远程日历,但不幸的是订阅是只读的,所以这没有帮助。

我已经研究了几种方法,但还没有找到令人满意的方法。最有前途的似乎是syncevolution,它可用于将远程日历与本地数据库同步,但不清楚我是否可以(1)将它们同步到单个本地数据库或(2)将它们同步到单独的本地数据库数据库,但以某种方式保持这些本地数据库同步。做我想做的事需要其中之一。

有办法在这里实现我的目标吗?

ubuntu caldav

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