小编pap*_*uck的帖子

在Haskell中的函数之间共享变量的惯用方式?

我遇到一种情况,其中递归函数根据命令行参数做出决定。递归函数不会直接由调用main。我想知道最好的方法是使参数对函数可用。我不想getArgs在递归函数中调用,因为这似乎会增加很多开销。

然而,尴尬的来电getArgsmain,然后通过不使用这些函数传递参数。这个例子不是递归的,但是希望您能理解这个概念。

import Data.Char
import System.Environment

main :: IO ()
main = do
    args <- getArgs  -- want to use these args in fun2
    traverse_ fun1 ["one", "two", "three"]

fun1 :: String -> IO ()
fun1 s = traverse_ fun2 s

fun2 :: Char -> IO ()
fun2 c = do
    if "-u" `elem` args then print $ toUpper c  -- how to get args here?
    else print $ toLower c
Run Code Online (Sandbox Code Playgroud)

传递参数似乎是一个坏主意: …

haskell

10
推荐指数
3
解决办法
190
查看次数

在Haskell中读取大型二进制文件的最快方法?

我想处理一个太大而无法读入内存的二进制文件。目前,我使用ByteString.Lazy.readFile来流传输字节。我认为使用流媒体包来提高程序速度是一个好主意。但是,的文档显示readFile

readFile :: FilePath -> (Stream (Of String) IO () -> IO a) -> IO a

使用类型为'Stream(Of String)IO()-> IO a'的函数读取文件的行,以将流转换为'IO a'类型的值。

所以streaming包只读取ASCII文本文件?我可以使用该程序包以字节为单位读取二进制文件吗?

haskell

7
推荐指数
1
解决办法
178
查看次数

如何确定Socket.Listen()的MaxConnections?

System.Net.Sockets.Socket.Listen()函数需要一个backlog参数,该参数是Listen()可以排队的最大连接数.

从MSDN文档:

要确定您可以指定的最大连接数,请检索该MaxConnections值.

所以我点击MaxConnections该链接将我带到页面SocketOptionName Enumeration,其中说:

MaxConnections: 不支持; 如果使用将抛出SocketException.

因此,此MaxConnections枚举的文档说不使用它,但不提供替代方案.如何确定最大连接数,以便我有一个值传递给Socket.Listen()函数?

.net c# sockets

6
推荐指数
1
解决办法
624
查看次数

iOS - 如何将颜色存储在中央位置而不是单独设置?

在 Android Studio 中,您可以在目录中创建一个 XML 文件res,该文件将所有 RGB 值存储在中央位置。如果两个 UI 元素使用相同的颜色,则使用该颜色的名称。因此,以后如果您想调整该颜色,只需在 XML 文件中执行一次即可。您不必单独调整每个元素。

我正在 Xcode 9.0.1 中使用 Interface Builder,看来我必须使用图形颜色选择器来复制和粘贴 RGB 值。当然有一个颜色变量的中央存储库。

xcode colors interface-builder ios

5
推荐指数
0
解决办法
219
查看次数

在GHC中优化单构造函数数据类型的澄清

我正在阅读有关如何优化Haskell代码的内容,并遇到了有关GHC中单构造函数数据类型的注释。

摘抄:

GHC喜欢单构造函数数据类型,例如元组。将单构造函数数据类型传递给严格函数时,可以将其解压缩。例如,给定此功能:

f (x,y) = ...
Run Code Online (Sandbox Code Playgroud)

GHC的严格性分析器将检测到f在其参数中是严格的,并按以下方式编译函数:

f z = case z of (x,y) -> f' x y
f' x y = ...
Run Code Online (Sandbox Code Playgroud)

其中f称为包装器,f'称为工作器。包装器到处都是内联的,因此,例如,如果您有这样的对f的调用:

... f (3,4) ...
Run Code Online (Sandbox Code Playgroud)

这最终将被编译为

... f' 3 4 ...
Run Code Online (Sandbox Code Playgroud)

并且元组已被完全优化掉。

这是否意味着我应该遍历程序并将所有函数参数包装到一个元组中?无论如何,当元组被展开时,我真的看不到这是一种优化。

这是对INLINE实用性的替代吗?我应该同时使用吗?只有一个?更好吗?

haskell ghc

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

使用malloc()为const char字符串动态分配内存

我正在编写一个从.ini文件中读取值的程序,然后将该值传递给接受PCSTR的函数(即const char*).功能是getaddrinfo().

所以,我想写PCSTR ReadFromIni().要返回一个常量字符串,我计划使用malloc()内存分配内存并将内存转换为常量字符串.我将能够获得从.ini文件中读取的确切字符数.

这种技术还好吗?我真的不知道还能做什么.

以下示例在Visual Studio 2013中正常运行,并根据需要打印出"hello".

const char * m()
{
    char * c = (char *)malloc(6 * sizeof(char));
    c = "hello";
    return (const char *)c;
}    

int main(int argc, char * argv[])
{
    const char * d = m();
    std::cout << d; // use PCSTR
}
Run Code Online (Sandbox Code Playgroud)

c c++ malloc const-char const-pointer

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

当Haskell传递给返回Just x的lambda时,如何知道什么都不保留?

我只是想了解为什么这不会出错:

Prelude> Nothing >>= (\x -> Just $ x + 3)
Nothing
Run Code Online (Sandbox Code Playgroud)

如果我将lambda分解为各个步骤:

Prelude> Nothing + 3

<interactive>:8:1: error:
    • Non type-variable argument in the constraint: Num (Maybe a)
      (Use FlexibleContexts to permit this)
    • When checking the inferred type
        it :: forall a. Num (Maybe a) => Maybe a
Run Code Online (Sandbox Code Playgroud)

Prelude> Just Nothing
Just Nothing
Run Code Online (Sandbox Code Playgroud)

haskell

4
推荐指数
1
解决办法
117
查看次数

在哪里可以创建没有管理员权限/权限的目录?

我正在创建一个与第三方程序一起使用的DLL.是否第三方程序在Windows中具有管理员权限是我无法控制的.

DLL需要创建一个目录,但似乎CreateDirectory不起作用,因为它没有管理员权限.

升级UAC不是一种选择,因为我只修改DLL而不是第三方程序.我无法强制用户右键单击第三方程序和"以管理员身份运行".

(Visual C++ 2010)

编辑

我想写信给C:\ProgramData\.我使用SHGetFolderPath()和检索该路径CSIDL_COMMON_APPDATA.

c c++ windows winapi

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

用自己的Queue类型包装Data.Sequence有什么问题吗?

我要为我的申请排队。据我了解,Data.Sequence是生产代码的最佳选择。为了保持我的代码优雅,惯用和整体的Haskelly,在我自己的Queue数据类型中包装Data.Sequence以隐藏我不需要的功能有什么问题吗?

haskell

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

从自定义类型列表中过滤和提取的最佳方法?

我有一个表示命令行选项的数据类型:

data Flag = Verbose | Help | Buffer Int deriving (Show, Eq)

程序运行时,我得到一个列表Flag,与用户指定的选项相对应。例如,[Buffer 10, Verbose]

我的问题是,IntBufferin中提取值的最佳方法是什么[Flag]
该列表甚至可能没有Buffer
我要提出的只是某种复杂的遍历/折叠,它使用一条case语句Buffer从其他Flags中过滤掉。

haskell

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

标签 统计

haskell ×6

c ×2

c++ ×2

.net ×1

c# ×1

colors ×1

const-char ×1

const-pointer ×1

ghc ×1

interface-builder ×1

ios ×1

malloc ×1

sockets ×1

winapi ×1

windows ×1

xcode ×1