小编ren*_*ick的帖子

非整数的模数/余数函数

rem给出了这个:

Prelude> rem 9 8
1
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

Prelude> nonIntRem 9.1 8
1.0999999999999996
Run Code Online (Sandbox Code Playgroud)

我这样实现了:

nonIntRem x y = x - (y * (fromIntegral $ truncate (x/y)))
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 在标准的Haskell库中是否已存在类似的内容?我更喜欢使用标准功能,我可能错过了它.
  2. 如果没有,这个功能在其他语言中是否有更标准的名称?也许fmod,但在这种情况下负面的行为不像mod,而是像rem一样.如果没有标准名称,你能想到这个功能更好的名字吗?
  3. 它似乎工作正常,但如果您发现此功能有问题,我想了解它.

floating-point haskell modulo

18
推荐指数
1
解决办法
1万
查看次数

打印类型签名列表

我希望能够在ghci中键入以下内容:

map showTypeSignature [(+),(-),show]
Run Code Online (Sandbox Code Playgroud)

我希望ghci返回以下字符串列表:

["(+) :: Num a => a -> a -> a","(-) :: Num a => a -> a -> a","show :: Show a => a -> String"]
Run Code Online (Sandbox Code Playgroud)

当然,我遇到麻烦的第一个地方是我无法构造第一个列表,因为函数的类型签名不匹配.我该怎么做才能构建这样一个列表?ghci如何完成类型签名的打印?ghci命令在哪里:t定义(其来源)?

haskell types

5
推荐指数
2
解决办法
1240
查看次数

阻止ghci在提示符中显示模块

当我在ghci中开始一个会话时,我使用:

:set prompt >> 
Run Code Online (Sandbox Code Playgroud)

但是,某些函数调用在评估时仍会在提示符处显示模块名称.我想,除了我的自定义提示,我从不想要任何其他内容.

  1. 如何抑制此显示?
  2. 试图向我展示的提示究竟是什么?为什么它只对某些函数调用执行此操作而不是所有函数调用?我不明白发生了什么的逻辑.

实际ghci输出:

>>m00 <- iOIandRTfromPhrase 0.25 2 2 4 [2] 2 [2] 4.0 3                                                                                                       
>>rs <- newMMap [("100",m00)]                                                                                                                                
>>:{                                                                                                                                                         
*ExperimentalConductive ExperimentalConductive Music.Theory.Bjorklund SuperDirtAction NonlinearEnsemble EnsembleNew Control.Concurrent Data.List| let lsysTest rules axiom gen phraseLength = do                                                                                                                           
*ExperimentalConductive ExperimentalConductive Music.Theory.Bjorklund SuperDirtAction NonlinearEnsemble EnsembleNew Control.Concurrent Data.List|     f <- flatRandomPattern gen rules axiom [0.25,0.5..1.5] phraseLength                                                                                                  
*ExperimentalConductive ExperimentalConductive Music.Theory.Bjorklund SuperDirtAction NonlinearEnsemble EnsembleNew Control.Concurrent Data.List|     return f                                                                                                                                                             
*ExperimentalConductive ExperimentalConductive Music.Theory.Bjorklund SuperDirtAction NonlinearEnsemble EnsembleNew Control.Concurrent Data.List| :}         
>>:{                                                                                                                                                         
*ExperimentalConductive ExperimentalConductive Music.Theory.Bjorklund …
Run Code Online (Sandbox Code Playgroud)

haskell prompt ghci read-eval-print-loop

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

在vim中,如何使用setreg将回车添加到寄存器?

我的.vimrc中有这个命令:

vip:normal @g<CR>
Run Code Online (Sandbox Code Playgroud)

当我通过键入缓冲区来设置寄存器'g'时,它会起作用:

qg<CR>jq
Run Code Online (Sandbox Code Playgroud)

如果我输入:register,它显示:

--- Registers ---

"g   ^Mj
Run Code Online (Sandbox Code Playgroud)

之后,键入@g会导致回车,然后光标移动到下一行.^ M以特殊颜色显示.

但是,当我在我的vimrc中使用setreg命令时,如果我输入@g,则没有任何反应.

call setreg('g','^Mj')
Run Code Online (Sandbox Code Playgroud)

如果我输入:register,它显示:

--- Registers ---

"g   ^Mj
Run Code Online (Sandbox Code Playgroud)

^ M不是特殊颜色.

我的.vimrc中有以下内容:

map <CR> :call MyFunction<CR>
Run Code Online (Sandbox Code Playgroud)

我想要存储在寄存器中的回车是运行MyFunction.只要我手动填充缓冲区而不是使用setreg,MyFunction就会被完美地调用.

我哪里出错了?我的平台是Linux.

vim carriage-return vim-registers

4
推荐指数
2
解决办法
1197
查看次数

将函数列表中的每个函数逐渐应用于某个值,累积结果的函数的名称是什么?

就像标题所说的那样.我已经实现了这个,但是这个函数可能已经有了一个通用的名称,并且存在于标准库中.

关于此功能的其他建议是受欢迎的.也许有更清洁的实施.

let transform x funcList = transform' x [x] funcList
        where transform' startVal accum funcList 
                   | null funcList = reverse accum
                   | otherwise = let result = (head funcList) startVal
                                     in transform' result (result:accum) $ tail funcList
Run Code Online (Sandbox Code Playgroud)

执行时,它执行以下操作:

> transform 2 [(2 + ),((-1) +),(3 *)]
[2,4,3,9]
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
1
解决办法
213
查看次数