我想从字符串创建切片对象; 现在唯一的方法似乎是通过一个繁琐的hacky eval声明
class getslice:
def __getitem__(self, idx): return idx[0]
eval("getslice()[%s, 1]" %(":-1"))
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:对不起,如果原始提示不清楚,则在这种情况下输入为": - 1".关键在于解析字符串.Ignacio Vazquez-Abrams的回答至少解决了这个问题(并且似乎也适用于反向索引),但我认为如果不是在概念上干净,我上面的解决方案仍然更清晰(如果Python改变了切片语法,它将正常工作).
我想覆盖Haskell中的默认整数构造函数,因此它们产生字符串(主要是为了好奇,但暂时为LaTeX的\ frac {} {}带来不便的输入替代.
我希望能够使用语言本身,而不是使用特殊的解析器,但我想这可能不会成功...
module Main where
import Prelude hiding ((+))
newtype A = A Int deriving (Eq, Show, Num)
default (A)
(+) :: A -> (A -> String)
(A a) + (A b) = (show a) ++ " + " ++ (show b)
main2 = 3+4
main :: IO ()
main = putStrLn main2
Run Code Online (Sandbox Code Playgroud)
上面的问题是+函数只适用于(A,A)而不是(A,String)等.如果一个简单地省略模式匹配"(A a)"并写入"a"代替,那么show()函数以"A"为前缀,因此"3"变为"A 3"而不是"3".
我想覆盖Show for A,但它似乎很头疼......
我现在遇到了两个不相关的包,missingpy和monadiccp的相同错误.
> cabal install -p -v monadiccp
Run Code Online (Sandbox Code Playgroud)
(经过一些输出)
Creating dist/build (and its parents)
/usr/local/haskell/bin/ghc --make -package-name monadiccp-0.7.0 -hide-all-packages -fbuilding-cabal-package -i -idist/build -i. -idist/build/autogen -Idist/build/autogen -Idist/build -Ilib -optP-include -optPdist/build/autogen/cabal_macros.h -odir dist/build -hidir dist/build -stubdir dist/build -package-id Monatron-0.3.1-360ddfdcf06bcd34f1ed9c1f1c375202 -package-id base-4.3.1.0-1554f26e1cc1c87f47464e927dddbd20 -package-id containers-0.4.0.0-8781485edb2ac0db733a9f9c72e27945 -package-id haskell98-1.1.0.1-0a04bcdb24934b6be516a3abfc033021 -package-id mtl-2.0.1.0-91f62d81c946aa60137dcc008e554a3a -package-id pretty-1.0.1.2-6970e62db724fea03caad23f58dd8f86 -package-id random-1.0.0.3-9024b40453c28359a37c49ce4e776f6e -O -XHaskell98 Data.Expr.Sugar Control.CP.SearchTree Control.CP.Transformers Control.CP.ComposableTransformers Control.CP.Solver Control.CP.PriorityQueue Control.CP.Queue Control.CP.FD.Interface Control.CP.FD.OvertonFD.OvertonFD Control.CP.FD.OvertonFD.Sugar Control.CP.EnumTerm Control.CP.FD.Solvers Control.CP.FD.Gecode.CodegenSolver Control.CP.FD.Model Control.CP.FD.Example Data.Expr.Data Data.Expr.Util Data.Linear Control.CP.FD.Gecode.Common Control.CP.FD.OvertonFD.Domain Control.CP.FD.SimpleFD Control.CP.FD.Graph Control.CP.FD.Decompose Control.CP.FD.FD Control.CP.Debug Control.Mixin.Mixin Control.CP.SearchSpec.Language Control.CP.SearchSpec.Generator Language.CPP.Syntax.AST Language.CPP.Pretty …Run Code Online (Sandbox Code Playgroud) 我想在WinGHCi中输出非ascii字符,但这是我得到的:
Prelude> "?"
"\948"
Prelude> putStr "\948"
*** Exception: <stdout>: hPutChar: invalid argument (character is not in the code page)
Run Code Online (Sandbox Code Playgroud)
我在Windows XP上使用WinGHCi 7.0.3.我有什么办法让WinGHCi打印出一个漂亮的小三角洲?
我正在尝试写一些似乎与"排名2类型"类似的东西,但是对于约束而言.(或者,假设将->"等级2类型"的定义更改=>为有意义可能是不正确的;如果您想出更好的术语,请编辑问题).
首先,Suitable类型类(来自Data.Suitable,rmonad的基础)可用于表示可以使用的值的类型.在这个问题上,我会用
Suitable m a
Run Code Online (Sandbox Code Playgroud)
表示该值a可以用作monad的某些函数的值m(特别是,如果m是DSL,则其值通常a是合适的),例如
class PrintSuitable m where
printSuitable :: Suitable m a => a -> m ()
Run Code Online (Sandbox Code Playgroud)
有关如何使用"合适"的示例,请参阅RMonad [ link ] 的顶部注释及其来源.例如,可以定义Suitable m (Map a b)并打印地图中的元素数量.
目标:现在,我有一个monad转换器MyMonadT,并希望每当MyMonadT m一个PrintSuitable实例时创建m一个PrintSuitable实例.
等级2约束动机:问题是类型a是关于printSuitable函数引入的,即不出现在class签名中.由于只能为class签名添加约束(对instance函数实现的附加约束是非法的),因此a在类签名中对所有内容进行说明是有意义的(下面的第2行).
下面显示了预期的代码.
instance …Run Code Online (Sandbox Code Playgroud) 该Data.Binary文档显示手写的一个实例.有没有解决的办法?我在这里看到有另一个库,SerTH,它有一个(基于模板Haskell的)派生机制,但是它的链接似乎被打破了.此外,如果您了解其他库,良好的性能对我们至关重要.
先感谢您!
我有一个返回的功能vector<MyClass>; 什么是将其改为适合FFI的最佳方式?
我认为类似的类型:: [CIntPointer]可能是一个很好的妥协,如果可能的话.
假设我有类似的数据类型
data D a = D a a a
Run Code Online (Sandbox Code Playgroud)
和一个类型类
class C c ...
instance (C c1, C c2) => C (c1, c2)
Run Code Online (Sandbox Code Playgroud)
然后,我希望能够写作
data D a = D a a a deriving C
Run Code Online (Sandbox Code Playgroud)
并生成一个实例,
instance C ((a, a), a) => C (D a)
Run Code Online (Sandbox Code Playgroud)
通过使用模惰性评估同构,
D a ~ ((a, a), a)
Run Code Online (Sandbox Code Playgroud)
注意.使用newtype,GeneralizedNewtypeDeriving如果有一个,则无法使用data D m = D (m Integer) (m Integer).
注2.这个问题一般与Haskell表达有关 - 像Python这样的语言有一个名为元组的东西,它可以在任何使用元组的地方使用; 这个问题显示我在哪里/如何不知道如何在Haskell中模拟相同的事情.
我想要一个能编写序列的程序,
1
...
10000000
Run Code Online (Sandbox Code Playgroud)
到一个文件.什么是最简单的代码可以编写,并获得不错的性能?我的直觉是存在一些缺乏缓冲的问题.我的C代码以100 MB/s的速度运行,而通过引用,Linux命令行实用程序dd以9 GB/s 3 GB/s的速度运行(对不起,请注意 - 请注意 - 我对大图订单更感兴趣 - 虽然很高).
人们会认为这将是一个现在解决的问题...即任何现代编译器都会立即编写这样的程序,表现得相当好......
#include <stdio.h>
int main(int argc, char **argv) {
int len = 10000000;
for (int a = 1; a <= len; a++) {
printf ("%d\n", a);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在编译clang -O3.调用putchar('\n')8次的性能框架可获得相当的性能.
一个naiive Haskell实现以13 MiB/sec的速度运行,并使用ghc -O2 -optc-O3 -optc-ffast-math -fllvm -fforce-recomp -funbox-strict-fields.(我没有重新编译我的库-fllvm,也许我需要这样做.)代码:
import Control.Monad
main = forM [1..10000000 :: Int] …Run Code Online (Sandbox Code Playgroud) 我在共享的Linux服务器上,我无法安装软件.从源代码安装OpenGL似乎是一个很大的痛苦(我发现Mesa依赖于libxml2后停止了),而且我没有在任何Haskell程序中使用它.
如何在Haskell平台中禁用OpenGL?我周围的配置检查了通过删除这些,但是当我添加--disable-OpenGLRaw或--without-OpenGLRaw到./configure选项,它说:"无法识别的选项",实际上并没有禁用的软件包.
此外,我尝试使用cabal-install bootstrap,但由于某些原因cabal-install 0.14.0不适用于GHC 7.6.3.
非常感谢你!!