我在haskell中有两个执行IO的线程.(他们只打印).类似于以下内容:
thread1 :: IO ()
thread1 = putStrLn "One"
thread2 :: IO ()
thread2 = putStrLn "Two"
Run Code Online (Sandbox Code Playgroud)
我目前正在获得如下结果:
OnTwoe
OTnweo
Run Code Online (Sandbox Code Playgroud)
如何确保每个线程以原子方式完成其IO?
"呃,"你可能会想......"另一个语法问题,这里让我谷歌那个为你而努力." 可惜!我用Google搜索了,我仍然难过!
在yesod博客的代码中找到
import System.IO
import Data.Enumerator
import Data.Enumerator.Binary
main =
withFile "output.txt" WriteMode $ \output ->
run_ $ enumFile "input.txt" $$ iterHandle output
Run Code Online (Sandbox Code Playgroud)
然而,"$$"运算符对我来说是新的.Haskell 2010报告仅提及它一次作为运营商符号.它有什么作用?
我创建了一个包含类"myCppClass"的C++ Dll项目,并尝试使用以下代码将其导出:如下所述:http://msdn.microsoft.com/en-us/library/a90k134d( v = vs. 80)的.aspx
class __declspec(dllexport) CExampleExport : //public CObject
{ ... class definition ... };
Run Code Online (Sandbox Code Playgroud)
我省略了"public CObject",因为它需要afx.h并暗示它是一个MFC Dll.我不确定这是否是好事但它与DLL项目默认设置不同.
从上面链接的文档中我可以相信所有"公共函数和成员变量"都可以导入.我如何在C#中实现这一目标?可以简单地实例化该类吗?
编辑:我刚刚意识到帖子的标题可能会产生误导.重点应放在C#的DllImporting上,并确保我在C++中正确地遵循了文档
为什么haskell需要多个重写规则,具体取决于函数组合技术和长度?有办法避免这种情况吗?
例如,给出以下代码......
{-# RULES
"f/f" forall a. f ( f a ) = 4*a
#-}
f a = 2 * a
Run Code Online (Sandbox Code Playgroud)
这适用于
test1 = f ( f 1 )
Run Code Online (Sandbox Code Playgroud)
但是我们需要添加规则
test2 = f . f $ 1
Run Code Online (Sandbox Code Playgroud)
和
test3 = f $ f 1
Run Code Online (Sandbox Code Playgroud)
给我们留下以下规则
{-# RULES
"f/f1" forall a. f ( f a ) = 4 * a
"f/f2" forall a. f . f $ a = 4 * a
"f/f3" forall a. f $ f $ a = …Run Code Online (Sandbox Code Playgroud) 我一直在Haskell编写一个不断增长的代码库.我的问题是我已根据GHCI告诉我应该是什么来为函数添加类型签名.
现在的问题是我的代码库不断增长,只要我改变了一件事,我的代码就会在整个地方发生故障,并且我会跟踪所有问题.
通过在ghci中加载模块得出的类型是否过于具体?如何确定在我的签名中使用哪种类型或类型类以充分利用强类型的强大功能?(即不花一小时传播微小变化?).
所以这更像是一个普遍的问题.我似乎一直在发现自己被放在越来越大的项目上.最近我被分配到一个用C和VHDL编写的非常大的项目.我的目标是熟悉代码并最终在项目中起带头作用.到目前为止,这是我分配给我的最大项目,我没有开始.
所以这是我的问题:你用什么方法/工具来学习一切是如何工作的?
您是否只是增加和扩展评论?
你是否对项目进行了UML表示?
任何提示都会很棒!谢谢
我正在使用XMLHttpRequest从服务器获取图像(从第三方服务器小程序本地运行)
甲简化的代码版本如下所示.
图像以JPEG格式返回,返回的标题显示"content-type = image/jpg".我可以通过Firebug for Firefox查看信息.
但是我有一个可怕的时间能够在网页上显示实际图像,因为它是从服务器返回的图像数据而不是图像位置的uri.
从返回的数据中显示此图像的正确方法是什么?我应该使用<span>标签,<img>标签还是<magical-show-image-from-data>标签?
function getXML(url, postData, requestStateChangeHandler){
if(window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{//Code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = requestStateChangeHandler;
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.setRequestHeader('Cache-Control', 'no-cache');
xmlhttp.send(postData);
}
function requestStateChangeHandler(){
if (xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
document.getElementById('results').innerHTML = xmlhttp.responseText;
}
else
dump("Error loading page\n");
}
}
Run Code Online (Sandbox Code Playgroud) 长话短说我试图复制Erlang中的睡眠理发问题.
在我的解决方案中,我决定对于所有等待的进程,我会将它们放入列表中.然后,一旦进程转向,我就会从列表中取出PID.
不幸的是,当我打电话
length(myListOfPids).
Run Code Online (Sandbox Code Playgroud)
它失败了,作为一个例子:
length([<0.46.0>]).
* 2: syntax error before: '<'
Run Code Online (Sandbox Code Playgroud)
有没有办法存储PID,以便我可以回忆起并正常使用它们?即
PID ! message
Run Code Online (Sandbox Code Playgroud)
...以防这里重要的是我在运行程序时收到的实际错误:
=ERROR REPORT==== 1-Jul-2010::05:50:40 ===
Error in process <0.44.0> with exit value:
{badarg,[{erlang,length,[<0.46.0>]},{barber1,waitingRoom,2}]}
Run Code Online (Sandbox Code Playgroud)
barber1是我的模块,waitingRoom是跟踪哪些进程正在等待的函数
是否有一种在C#中处理多部分MIME数据的简洁方法.
在调用已关闭的应用程序(我无权更改它)后,我得到一个类似下面的MIME响应.C#是否提供通过System.Net.Mime或System.Net.Mail解析此功能的能力?
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_42_31322961.1286389502467"
------=_Part_42_31322961.1286389502467
Content-Type: text/xml
Content-Transfer-Encoding: 7bit
Content-ID: <xmlContextInfo>
<UnneededXML> <Stuff> </Stuff> </UnneededXML>
------=_Part_42_31322961.1286389502467
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <myImage>
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
Run Code Online (Sandbox Code Playgroud)
从响应中我真正需要的是"myImage"部分(比上面显示的要长得多)
我有一个 C 函数,它采用双间接指针的几个参数。
像这样的东西
int myFunction (int ** foo, int** bar, int **baz){
int size = figureOutSizeFunction();
*foo = (int*) malloc (sizeof(int) * size);
return SomeOtherValue;
}
Run Code Online (Sandbox Code Playgroud)
现在在 C# 中,我试图将它传递给一个 IntPtr,但是 IntPtr 始终为零。当我将这些值传递给下一个 DLL C 函数时,DLL 会因系统访问冲突而失败。我知道代码仅在 C 环境中工作(我有一个测试代码的“main”)但是,从 C# 调用时它不起作用
我需要在 C# 中传递什么变量类型才能传递给 C DLL?ref ref int?
我正在尝试优化一个旨在获取大型数据集然后对其应用不同操作的库.既然库正在运行,我想优化它.
我的印象是非严格评估允许GHC组合操作,以便在编写所有函数时只迭代一次数据,以便对参数进行排序以便于减少.(并且可能减少对每个数据执行的操作数)
为了测试这个,我编写了以下代码:
import Criterion.Main
main = defaultMain
[ bench "warmup (whnf)" $ whnf putStrLn "HelloWorld",
bench "single (whnf)" $ whnf single [1..10000000],
bench "single (nf)" $ nf single [1..10000000],
bench "double (whnf)" $ whnf double [1..10000000],
bench "double (nf)" $ nf double [1..10000000]]
single :: [Int] -> [Int]
single lst = fmap (* 2) lst
double :: [Int] -> [Int]
double lst = fmap (* 3) $ fmap (* 2) lst
Run Code Online (Sandbox Code Playgroud)
使用Criterion库进行基准测试我得到以下结果:
benchmarking warmup (whnf)
mean: 13.72408 ns, lb …Run Code Online (Sandbox Code Playgroud) 我一直在开发一些使用Data.Array来使用多维数组的代码,现在我想将这些数组放入数据类型中,所以我有这样的东西
data MyType = MyType { a :: Int, b :: Int, c :: Array }
Run Code Online (Sandbox Code Playgroud)
Data.Array有类型:
(Ix i, Num i, Num e) => Array i e
Run Code Online (Sandbox Code Playgroud)
"e"可以是任何类型,而不仅仅是Num.
我确信我完全错过了一个概念.
我该如何做到这一点?与Int,Num,String等不同的Data.Array类型有什么特别之处?
谢谢您的帮助!
我试图解析来自C#网站的XML响应.响应的格式类似于以下内容:
<Company>
<Owner>Bob</Owner>
<Contact>
<address> -1 Infinite Loop </address>
<phone>
<LandLine>(000) 555-5555</LandLine>
<Fax> (000) 555-5556 </Fax>
</phone>
<email> foo@bar.com </email>
</Contact>
</Company>
Run Code Online (Sandbox Code Playgroud)
我想要的唯一信息是LandLine和传真号码.然而,我目前的方法似乎真的很差.基本上它是一堆嵌套的while循环并检查Element名称,然后在找到正确的Element时读取Content.我正在使用类似下面的列表:
XmlReader xml = XmlReader.Create(websiteResultStream, xmlSettings);
while(xml.Read()){
if(xml.NodeType == XmlNodeType.Element){
if(xml.Name.ToString() == "Phone"){
while(xml.Read()) {
if(xml.NodeType == XmlNodeType.Element) {
if(xml.Name.ToString() == "LandLine"){
xml.MoveToContent();
xml.ReadContentAsString();
}
if(xml.Name.ToString() == "Fax"){
xml.MoveToContent();
xml.ReadContentAsString();
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我是XML/C#的新手,但上面的方法只是尖叫不好的代码!我想确保如果结构发生变化(即有类似"mobile"的附加电话号码类型),那么代码是健壮的(因此额外的while循环)
注意:上面的C#代码并不准确,并且缺少一些检查等,但它证明了我当前糟糕的恶心方法
如果它们存在的话,从这两个元素中简单地提取内容的最佳/最干净的方法是什么?