问题:我有一系列聊天消息 - 两个用户之间 - 带有时间戳.比如说,我可以同时呈现一整天的聊天消息.然而,在一整天中,存在多个离散的对话/会话......并且对于用户而言,将这些分开而不是作为一个连续流的所有日子将更有用.
是否存在可以"推断"隐式会话/会话从时间戳开始/中断的算法或启发式算法?除了任意'如果差距大于x分钟,它是一个单独的会话'.如果这是唯一的情况,这个间隔是如何确定的?无论如何,我想避免这种情况.
例如,有50条消息在2:00到3:00之间发送,然后休息,然后在4:00到5:00之间发送20条消息.在那之间插入一个休息......但是如何确定休息?
我确信已有关于这个主题的文献,但我不知道该搜索什么.
我有一段时间玩边缘检测算法和基于梯度的方法.
(有关更多说明,请参阅评论)
Data.Vector.Mutable似乎需要PrimMonadin ST s和IOmonads 的实例.
类型类定义为 -
-- | Class of primitive state-transformer monads
class Monad m => PrimMonad m where
-- | State token type
type PrimState m
-- | Execute a primitive operation
primitive :: (State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
-- | Expose the internal structure of the monad
internal :: m a -> State# (PrimState m) -> (# State# (PrimState m), a #)
Run Code Online (Sandbox Code Playgroud)
它们是这样实现的 …
我正在寻找一个基本上就像mapM在列表上的函数- 它执行一系列monadic动作,将列表中的每个值作为参数 - 并且每个monadic函数返回m (Maybe b).但是,我希望它在导致函数返回Just值的第一个参数之后停止,之后不再执行,并返回该值.
好吧,只显示类型签名可能更容易:
findM :: (Monad m) => (a -> m (Maybe b)) -> [a] -> m (Maybe b)
Run Code Online (Sandbox Code Playgroud)
其中b是第一个Just值.将Maybe在结果是从findING(在一个空列表等的情况下),并没有任何跟Maybe在一元函数返回.
我似乎无法通过直接应用库函数来实现它.我可以用
findM f xs = fmap (fmap fromJust . find isJust) $ mapM f xs
Run Code Online (Sandbox Code Playgroud)
这将是有效的,但我测试了这一点似乎所有的monadic动作都是在调用之前执行的find,所以我不能在这里依赖懒惰.
ghci> findM (\x -> print x >> return (Just x)) [1,2,3]
1
2
3
-- returning IO (Just 1)
Run Code Online (Sandbox Code Playgroud)
实现此函数的最佳方法是什么,在第一次"正常"返回后不会执行monadic操作?可以做的事情:
ghci> findM …Run Code Online (Sandbox Code Playgroud) 这个标题肯定不是很具描述性,但我不知道如何在简短的标题中描述这一点.我很感激任何建议!
我将展示我的问题的一个非常简化的版本:)
所以我有一个类型类
class Known f a where
known :: f a
Run Code Online (Sandbox Code Playgroud)
这应该能够在某个索引处生成给定类型的规范构造,对于使用GADT和东西很有用.我给的简化版本,这与初步认识的部分.
所以显然有一个例子Proxy:
instance Known Proxy a where
known = Proxy
Run Code Online (Sandbox Code Playgroud)
我们可以使用哪个:
> known :: Proxy Monad
Proxy
Run Code Online (Sandbox Code Playgroud)
但是这个类似HList的类型也有一个实例:
data Prod f :: [k] -> * where
PNil :: Prod f '[]
(:<) :: f a -> Prod f as -> Prod f (a ': as)
infixr 5 (:<)
Run Code Online (Sandbox Code Playgroud)
其中a Prod f '[a,b,c]大致相当于一个(f a, f b, f c)元组.相同的Functor,不同的类型.
编写实例非常简单:
instance …Run Code Online (Sandbox Code Playgroud) 我正在使用免费库中的FreeT类型来编写这个“运行”底层的函数:StateT
runStateFree
:: (Functor f, Monad m)
=> s
-> FreeT f (StateT s m) a
-> FreeT f m (a, s)
runStateFree s0 (FreeT x) = FreeT $ do
flip fmap (runStateT x s0) $ \(r, s1) -> case r of
Pure y -> Pure (y, s1)
Free z -> Free (runStateFree s1 <$> z)
Run Code Online (Sandbox Code Playgroud)
但是,我正在尝试将其转换为适用于FT,教堂编码的版本,而不是:
runStateF
:: (Functor f, Monad m)
=> s
-> FT f (StateT s m) a
-> …Run Code Online (Sandbox Code Playgroud) 假设我有一个功能
def odd_or_even n
if n%2 == 0
return :even
else
return :odd
end
end
Run Code Online (Sandbox Code Playgroud)
我有一个简单的可枚举数组
simple = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
我使用do-end块通过map运行它,使用我的函数:
simple.map do
|n| odd_or_even(n)
end
# => [:odd,:even,:odd,:even,:odd]
Run Code Online (Sandbox Code Playgroud)
如果不首先定义函数,我怎么能这样做呢?例如,
# does not work
simple.map do |n|
if n%2 == 0
return :even
else
return :odd
end
end
# Desired result:
# => [:odd,:even,:odd,:even,:odd]
Run Code Online (Sandbox Code Playgroud)
是不是有效的ruby,编译器甚至在考虑它时会生我的气.但是我如何实现同等类型的东西呢?
编辑
实际上,我的问题的解决方案对我来说比它背后的动机/推理要少得多,帮助我更多地了解ruby如何阻止工作:)
我一直在环顾四周,似乎无法找到任何看似"最新"的明确答案或进展.我见过一些有趣的项目,比如Mirah(以前的Duby),我正在调查一下.我见过JRuby用于将ruby编译成.dex失败了.我也一直在寻找Clojure,并意识到他们可能都与同一件事有关.
有没有人有关于如何开始并取得进展的任何提示?我不仅要问哪些框架可以提供帮助,更重要的是,我还要提出一个指导我的努力的理念/方向,以便开始.
从出生起,出于性能和内部数据结构的原因,我就一直被教导要避免像瘟疫一样的嵌套数组。所以我试图在 Ruby 中找到一个优化多维数据结构的好解决方案。
典型的解决方案可能涉及使用一维数组并通过 访问每个数组x*width + y。
Ruby 能够重载该[]运算符,因此也许一个好的解决方案会涉及使用multi_dimensional_array[2,4]甚至使用 splat 来支持任意维度数量。(但实际上,我只需要二维)
是否已经有一个图书馆/宝石可以用于此目的?如果没有,写这篇文章的最佳方法是什么?
我的嵌套数组查找现在是我的计算密集型脚本的瓶颈,因此这是重要的事情,而不是过早优化的情况。
如果有帮助的话,我的脚本主要使用随机查找和较少的遍历。
我想将一个HTML实体(特别是©)放入我的文档中.然而,如果我输入它并将其Text直接送入火焰组合器中,那么&符号将被转义为字面意义©- 或者更确切地说,输出的HTML是&copy;,这有点讽刺.
(如果我blaze-from-html在包含的HTML上使用©,blaze-from-html将其转换为unicode版权符号" ©",这有效,但我仍然想知道是否可以使用blaze访问较低级别的HTML并输入文字html源代码&.)
我目前正在使用wai-middleware-static为我的服务器提供自定义页面.但是,我看到我的服务器favicon.ico在每个页面加载时都收到了请求,以及我的每一个Web字体,所以我决定检查响应头上的缓存设置,发现没有.
wai-middleware-static返回一个Middleware值,我认为这是对每个请求运行的中间件提供的函数的回调.有没有办法修改它以在响应头中添加以告诉浏览器缓存结果?
haskell ×6
ruby ×2
typeclass ×2
algorithm ×1
android ×1
blaze-html ×1
clojure ×1
enumerable ×1
free-monad ×1
gadt ×1
haskell-wai ×1
heuristics ×1
java ×1
jruby ×1