有没有办法让音译在Emacs中工作,就像现在在Gmail中一样?我特别感兴趣的是让它在西里尔语中工作.
作为参考,Gmail执行以下操作:我可以输入svoboda并输出???????.这允许像我这样说俄语但不能打字的人轻松输入西里尔字符.在Gmail中,这适用于其他语言,但我只是非常担心西里尔语.
我应该传递给'遍历'(从迭代器模式的本质)的函数是什么,这样我可以根据每个原始元素累积状态,然后根据原始元素和状态到目前为止进行映射.
在'collect'和'disperse'中,只有映射取决于状态,或者状态取决于元素,但不能同时取决于两者.
http://etorreborre.blogspot.co.uk/2011/06/essence-of-iterator-pattern.html上的表似乎表示我应该使用'traverse'但是traverse是实现所有其他功能的函数,所以我有点迷茫.
作为haskell的绝对初学者,我不断阅读有关haskell的各种文章,pdf和教程.大多数示例/示例代码包括数学字符.即使是打字的常见任务
- >
我必须输入: - &>
事实是我不知道如何在emacs中键入数学字符(我用于练习haskell编码).我目前的键盘布局是"英国美国".
是否有任何特定的键盘或键盘布局最适合输入数学符号(用于haskell编程)?
haskell是否将所有Math符号作为函数?我目前的假设是haskell必须支持所有数学符号作为函数.
例如+, - ,/,*等
Unicode Math Symbols 注意:许多haskell论文中都有这些符号.
请解释Haskell如何确定优先级的部分,带有多个参数的函数和多个部分应用的函数.有时我发现很难弄清楚当整个表达式采用多个参数时,哪个部分函数会应用哪个参数.
以下是一些示例函数,但我确定不同的示例可能更具说明性.第一部分来自"有效的应用程序设计"一文.
sequence :: [IO a] ? IO [a]
sequence [] = return []
sequence (c : cs) = return (:) `ap` c `ap` sequence cs
(.) (.)
(.) (.) (.)
Run Code Online (Sandbox Code Playgroud)
有没有工具将这些表达式转换为lambda表达式?
我已经定义了一个名为的类型Natural,它是一个包含0的正整数:
newtype Natural = Natural Integer
deriving (Eq, Ord)
instance Show Natural where
show (Natural i) = show i
toNatural :: (Integral i) => i -> Natural
toNatural x | x < 0 = error "Natural cannot be negative"
| otherwise = Natural $ toInteger x
fromNatural :: Natural -> Integer
fromNatural (Natural i) = i
instance Num Natural where
fromInteger = toNatural
x + y = toNatural (fromNatural x + fromNatural y)
x - y = let …Run Code Online (Sandbox Code Playgroud) 只需阅读精彩的" Lens/Aeson Traversals/Prisms"文章并拥有真实世界的应用程序.鉴于以下匿名JSON结构,我如何棱析出集合而不是特定值?
{"Locations" : [ {"id" : "2o8434", "averageReview": ["5", "1"]},{"id" : "2o8435", "averageReview": ["4", "1"]},{"id" : "2o8436", "averageReview": ["3", "1"]},{"id" : "2o8437", "averageReview": ["2", "1"]},{"id" : "2o8438", "averageReview": ["1", "1"]}]}
Run Code Online (Sandbox Code Playgroud)
我有:
?> locations ^? key "Locations" . nth 0 . key "averageReview" . nth 0
Just (String "5")
Run Code Online (Sandbox Code Playgroud)
我想要的是:
?> locations ^? key "Locations" . * . key "averageReview" . nth 0
["5", "4", "3", "2", "1"]
Run Code Online (Sandbox Code Playgroud)
我错过了整个棱镜点吗?或者这是一个合法的用例?
干杯!
我对Haskell非常新,并试图学习这头野兽.这是一个简单的函数,可以将时间(以秒为单位)转换为[天,小时,分钟,秒].我已经用签名和类型挣扎了半天,但我仍然遇到类型错误.看起来我已经尝试过各种签名组合 - 没有运气.能否请你帮忙.
secToTime :: Integer -> [Integer]第一个并且得到了一堆类型错误,这些错误足以让我迷惑不解.是显示结果列表的正确方法:main = do print secToTime或main = do map (\x -> putStrLn . show) secToTime?
secToTime secs = [d,h,m,s]
where s = secs `rem` 60
m = truncate(secs / 60) `rem` 60
h = truncate(secs / 3600) `rem` 24
d = truncate(secs / 86400)
Run Code Online (Sandbox Code Playgroud)谢谢
我决定尝试State Monad尝试清理我已经开始的一些项目.我遇到了命名/分区问题.
如果我有以下对象:
data Obj = Player { oPos :: Point }
data World = World { wKeys :: [Key], wPlayer :: Obj }
Run Code Online (Sandbox Code Playgroud)
我可能有一个方便的功能,如:
setPlayer :: Obj -> World -> World
setPlayer o w = w{wPlayer = o}
Run Code Online (Sandbox Code Playgroud)
和匹配的状态操作,如:
setPlayerW :: Obj -> WorldState ()
setPlayerW o = get >>= put . setPlayer o
Run Code Online (Sandbox Code Playgroud)
它使用其他便利功能; 为了方便.
对于这样的事情,典型的命名约定是什么?我用W贴了国家版,但这有点难看.
并且"状态版本"是否典型地与单独文件中的"对象版本"隔离?
我完全错了吗?有没有更好的设置,然后我可能需要2个不同版本的任何操作?
isTogether' :: String -> Bool
isTogether' (x:xs) = isTogether (head xs) (head (tail xs))
Run Code Online (Sandbox Code Playgroud)
对于上面的代码,我想浏览字符串中的每个字符.我不允许使用递归.
需要帮助解决我的问题所带来的haskell问题.我知道需要采取的步骤(sorta)来实现我想要的但我真的不知道如何去做.
例如
说我有一个Maybe Int's 的列表-[[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]
我需要创建一个函数.
1)列出Maybe Ints
[[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]
Run Code Online (Sandbox Code Playgroud)
2)获取第一个列表(head?)
[Just 2, Nothing, Just 3]
Run Code Online (Sandbox Code Playgroud)
3)递归列表中的每个元素 - (x:xs)
Just 2, Nothing, Just 3
Run Code Online (Sandbox Code Playgroud)
4)转换Maybe Int为Char-fromEnum
'2', ' ', '3'
Run Code Online (Sandbox Code Playgroud)
5)返回String包含所有字符的完整内容-(++) = [char] / String
"2 3"
Run Code Online (Sandbox Code Playgroud)
6)移动到下一个List直到list = []
[Just 6,Just 3, Just 3]
Run Code Online (Sandbox Code Playgroud)
所以最终的结果就是这样在单独的行上打印出来: …
我在Mac上,我通过命令行运行Haskell.这是我的代码我递归地反转列表.
import Debug.Trace
reverse1 :: (Show a) => [a] -> [a]
reverse1 [] = []
reverse1 (x:xs) = trace(“input xs: “ ++ show xs) $ reverse1 xs ++ [x]
Run Code Online (Sandbox Code Playgroud)
赋值是以递归方式执行,并显示跟踪.如果我在添加跟踪信息后删除跟踪信息,它就会反过来.这是我收到的错误.
[1 of 1] Compiling Main ( reverse.hs, interpreted )
reverse.hs:4:24: lexical error at character '\8220'
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud) 为什么不编译?
append :: [a] -> [a] -> [a]
append xs ys = foldr (:) ys xs
traverse :: a -> [[a]] -> [[a]]
traverse x [[]] = [[x]]
traverse x [(y:ys)] = append [(x:y:ys)] (map (y:) (traverse x [ys]))
comb :: [a] -> [[a]]
comb [] = [[]]
comb (x:[]) = [[x]]
comb (x:y:[]) = [[x,y],[y,x]]
comb (x:xs) = map (traverse x) (comb xs)
Run Code Online (Sandbox Code Playgroud)
它失败并出现此错误:
Couldn't match type `a' with `[a]'
`a' is a rigid type variable bound by
the …Run Code Online (Sandbox Code Playgroud)