Haskell和其他函数式编程语言是在不维护状态的前提下构建的.我还不熟悉函数式编程的工作原理和概念,所以我想知道是否有可能以FP方式实现DP算法.
可以使用哪些函数式编程结构来做到这一点?
在纯函数式语言中,您可以对值执行的唯一操作是对其应用函数.
换句话说,如果你想用类型值做任何有趣的事情,a你需要一个带有类型的函数(例如),f :: a -> b然后应用它.如果有人用你(flip apply) a的类型交给你(a -> b) -> b,那是否适合替代a?
什么叫做类型的东西(a -> b) -> b?看起来它似乎是一个替身a,我很想把它称为代理,或来自http://www.thesaurus.com/browse/proxy的东西.
我正在学习monad,这是我的第一个工作(除了琐碎的monad).随意批评其中的一切无情.我对"更惯用"和"更优雅"的回应特别感兴趣.
该monad计算执行的绑定数.
data C a = C {value :: a, count :: Int} deriving (Show)
instance Monad C where
(>>=) (C x c) f = C (value $ f x) (c + 1)
return x = C x 0
add :: (Num a) => a -> a -> C a
add x y = return $ x + y
-- Simpler way to do this? foldM is obviously something different.
mysum [x] = return x
mysum (x:xs) = mysum xs …Run Code Online (Sandbox Code Playgroud) 在Agda邮件列表中,Conor McBride问道:
有没有办法像假定的那样掌握行动
Run Code Online (Sandbox Code Playgroud)trustFromJust :: Maybe x -> x如果没有任何东西,它实际上并没有检查Just and Goes Wrong(在Milner的意义上)?
Agda可能会证明Maybe a == Just1 a,并且可以消除sum类型的中间构造函数.
我可以想到使用unsafeCoerce#或unpackClosure#的方法,但其他人是否有想法?
import GHC.Prim
trustFromJust :: Maybe x -> x
trustFromJust x = y
where Just1 y = unsafeCoerce# x
data Just1 a = Just1 a
Run Code Online (Sandbox Code Playgroud)
虽然这个段错误(单个构造函数类型可以避免一些闭包开销).核心看起来不错:
main2 =
case (Data.Maybe.Just @ Type.Integer main3)
`cast`
(CoUnsafe
(Data.Maybe.Maybe Type.Integer)
(Just1 Type.Integer)
:: Data.Maybe.Maybe Type.Integer
~
Just1 Type.Integer)
of _ { Just1 y_aeb ->
$wshowsPrec 0 y_aeb ([] @ Char)
Run Code Online (Sandbox Code Playgroud) 当我编写文档时,我发现自己已经找到了适合该文档的orginization约定,我希望vim能够突出显示该约定.但是制作一个ftplugin太"全局"了,我希望语法着色随文档一起提供,所以如果我把它发送到没有该插件的某个地方,他们仍然可以获得着色.我发现你无法通过模式线进行,因为它只接受选项.
现在我试图找出是否有办法在视觉模式中选择一些文本(或者其他什么,但我使用视觉线模式,所以它会很好)并将它作为一系列vim命令执行.
例如,在一份文件的底部,我有:
vim highlighting:
syn match Comment "^>.*$"
Run Code Online (Sandbox Code Playgroud)
如何选择该文本并说"繁荣,执行它"而不必重新键入?
我正在构建一个简单的脚本,它会轮询一些数据,然后更新我提供给客户的电子表格。(这是一个小项目,我不需要任何花哨的东西。)
因此,我创建了一个 Google Cloud 项目,启用了 Sheets API,并获得了桌面应用程序的凭据。当我尝试运行快速入门示例时,出现错误:
访问被阻止:<我的项目名称>尚未完成 Google 验证过程
我尝试过谷歌搜索,所有的解决方案似乎都是针对用户看到这个应该做什么,但我是开发人员。我只需要授予我自己对此电子表格的访问权限,因为我的脚本是唯一会更改它的东西(我还将与客户共享它)。
我该怎么办?
我想知道如何将Char转换为Int.例如
a = '\x2' -- a == 2
-- type of a should be Char
b = charToInt a -- b == 2
-- type of b should be Int
Run Code Online (Sandbox Code Playgroud)
但我不知道如何:/
提前致谢
我很好奇,并且无法在Haskell中找到类似这样的建议.考虑一下是否sort写过但没有sortBy.
sortBy :: forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy f = map getX . sort . map X
where
newtype X = X { getX :: a }
instance Ord X where
compare (X a) (X b) = f a b
Run Code Online (Sandbox Code Playgroud)
有没有人见过这个提案?