我遇到一种情况,其中递归函数根据命令行参数做出决定。递归函数不会直接由调用main。我想知道最好的方法是使参数对函数可用。我不想getArgs在递归函数中调用,因为这似乎会增加很多开销。
然而,尴尬的来电getArgs中main,然后通过不使用这些函数传递参数。这个例子不是递归的,但是希望您能理解这个概念。
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)
传递参数似乎是一个坏主意: …
我想处理一个太大而无法读入内存的二进制文件。目前,我使用ByteString.Lazy.readFile来流传输字节。我认为使用流媒体包来提高程序速度是一个好主意。但是,的文档显示readFile:
readFile :: FilePath -> (Stream (Of String) IO () -> IO a) -> IO a使用类型为'Stream(Of String)IO()-> IO a'的函数读取文件的行,以将流转换为'IO a'类型的值。
所以streaming包只读取ASCII文本文件?我可以使用该程序包以字节为单位读取二进制文件吗?
该System.Net.Sockets.Socket.Listen()函数需要一个backlog参数,该参数是Listen()可以排队的最大连接数.
要确定您可以指定的最大连接数,请检索该
MaxConnections值.
所以我点击MaxConnections该链接将我带到页面SocketOptionName Enumeration,其中说:
MaxConnections: 不支持; 如果使用将抛出SocketException.
因此,此MaxConnections枚举的文档说不使用它,但不提供替代方案.如何确定最大连接数,以便我有一个值传递给Socket.Listen()函数?
在 Android Studio 中,您可以在目录中创建一个 XML 文件res,该文件将所有 RGB 值存储在中央位置。如果两个 UI 元素使用相同的颜色,则使用该颜色的名称。因此,以后如果您想调整该颜色,只需在 XML 文件中执行一次即可。您不必单独调整每个元素。
我正在 Xcode 9.0.1 中使用 Interface Builder,看来我必须使用图形颜色选择器来复制和粘贴 RGB 值。当然有一个颜色变量的中央存储库。
我正在阅读有关如何优化Haskell代码的内容,并遇到了有关GHC中单构造函数数据类型的注释。
摘抄:
GHC喜欢单构造函数数据类型,例如元组。将单构造函数数据类型传递给严格函数时,可以将其解压缩。例如,给定此功能:
Run Code Online (Sandbox Code Playgroud)f (x,y) = ...GHC的严格性分析器将检测到f在其参数中是严格的,并按以下方式编译函数:
Run Code Online (Sandbox Code Playgroud)f z = case z of (x,y) -> f' x y f' x y = ...其中f称为包装器,f'称为工作器。包装器到处都是内联的,因此,例如,如果您有这样的对f的调用:
Run Code Online (Sandbox Code Playgroud)... f (3,4) ...这最终将被编译为
Run Code Online (Sandbox Code Playgroud)... f' 3 4 ...并且元组已被完全优化掉。
这是否意味着我应该遍历程序并将所有函数参数包装到一个元组中?无论如何,当元组被展开时,我真的看不到这是一种优化。
这是对INLINE实用性的替代吗?我应该同时使用吗?只有一个?更好吗?
我正在编写一个从.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) 我只是想了解为什么这不会出错:
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) 我正在创建一个与第三方程序一起使用的DLL.是否第三方程序在Windows中具有管理员权限是我无法控制的.
DLL需要创建一个目录,但似乎CreateDirectory不起作用,因为它没有管理员权限.
升级UAC不是一种选择,因为我只修改DLL而不是第三方程序.我无法强制用户右键单击第三方程序和"以管理员身份运行".
(Visual C++ 2010)
编辑
我想写信给C:\ProgramData\.我使用SHGetFolderPath()和检索该路径CSIDL_COMMON_APPDATA.
我要为我的申请排队。据我了解,Data.Sequence是生产代码的最佳选择。为了保持我的代码优雅,惯用和整体的Haskelly,在我自己的Queue数据类型中包装Data.Sequence以隐藏我不需要的功能有什么问题吗?
我有一个表示命令行选项的数据类型:
data Flag = Verbose | Help | Buffer Int deriving (Show, Eq)
程序运行时,我得到一个列表Flag,与用户指定的选项相对应。例如,[Buffer 10, Verbose]。
我的问题是,Int从Bufferin中提取值的最佳方法是什么[Flag]?
该列表甚至可能没有Buffer。
我要提出的只是某种复杂的遍历/折叠,它使用一条case语句Buffer从其他Flags中过滤掉。