我正在阅读"对Haskell的一个温和的介绍",并且在早期它使用了这个例子,它在GHC中运行良好,在我的大脑中可怕:
initial = 0
next resp = resp
process req = req+1
reqs = client initial resps
resps = server reqs
server (req:reqs) = process req : server reqs
client initial ~(resp:resps) = initial : client (next resp) resps
Run Code Online (Sandbox Code Playgroud)
和调用代码:
take 10 reqs
我是如何看到它的,被reqs称为,client使用args 0和0 进行调用resps.因此resps现在不需要被调用......反过来reqs再次调用?这一切似乎都是无限的......如果有人能够详细说明它是如何运作的,我会非常感激!
所以我相信我现在理解延续,至少在某种程度上,这要归功于Fixnum Days中的社区方案wiki和Learn Scheme.
但是我想要更多的练习 - 也就是说,我可以通过更多的示例代码在我脑海中完成(最好是做作,所以没有多余的东西可以分散注意力).
具体来说,我想解决更多关于继续恢复和/或协同程序的问题,而不是仅使用它们来退出循环或其他任何东西(这是相当简单的).
无论如何,如果你知道除了我上面提到的那些教程之外的好教程,或者如果你想发布你写的那些将是一个很好的练习的东西,我会非常感激!
我可以通过右键单击项目并转到"团队项目设置">"区域和迭代">"迭代"选项卡,手动将新迭代添加到TFS中的团队项目.
有没有关于如何使用他们的API以编程方式执行此操作的示例?
谢谢!
我是C++的新手,在编写课程时,我意识到我的一个方法是要求矢量矢量.应该这样做还是我应该重新考虑我班级的界面?(怎么样?)
所以我正在Haskell中编写一个游戏,我将玩家视为一系列与各种转弯阶段相关的状态改变函数.最初,这看起来像:
let game' = phase1 game
game'' = phase2 game'
-- etc.
Run Code Online (Sandbox Code Playgroud)
国家monadosity的主要候选人,对吧?这导致更优雅:
do
phase1
phase2
-- etc.
Run Code Online (Sandbox Code Playgroud)
然而,似乎我必须改变phase1,phase2等等以一个样板"状态获取"步骤开始:
phase1 = get >>= \game -> -- ...
Run Code Online (Sandbox Code Playgroud)
我希望有一种方法可以抽象出来,所以我可以避免调用者和被调用者都使用样板文件.我太新了,不知道这是什么方式(这是我的第一个真正的Haskell项目).有什么建议?
我正在对代码合同进行简单的测试.以下代码处于winform状态.这通过(当然):
private void Test(Form form)
{
Contract.Requires(!string.IsNullOrEmpty(form.Name));
MessageBox.Show(form.Name);
}
protected override void OnLoad(EventArgs e)
{
if (!string.IsNullOrEmpty(Name))
Test(this);
base.OnLoad(e);
}
Run Code Online (Sandbox Code Playgroud)
但是,我只添加了一个非常简单的间接层,它说"需要未经证实":
private bool Valid(string str)
{
return !string.IsNullOrEmpty(str);
}
protected override void OnLoad(EventArgs e)
{
if (Valid(Name))
Test(this);
base.OnLoad(e);
}
Run Code Online (Sandbox Code Playgroud)
这似乎证明是微不足道的.为什么不工作?
我有一个std :: vector,我知道它永远不会增长 - 它总是有n元素(遗憾的n是,在编译时不知道所以我不能使用std :: array).我可以:
std::vector<blah> v(n);
Run Code Online (Sandbox Code Playgroud)
哪个正确设置其容量n.但是当我继续填写v时push_back,它会自动调整大小2n.
我意识到这是不成熟的优化,但它让我烦恼.有没有办法设置最大尺寸或什么?
我在学习(和有我的脑中吹)J和阅读的过程中学习Ĵ.我注意到我一直在学习的许多(全部?)动词都非常灵活.我可以做传统的4 - 2,或者我可以使用它与列表,例如4 5 - 3 4,甚至可以做到3 4 5 - 1这似乎"促进"运算符的右侧到阵列,即使我只是给它一个标量.
我假设后一行为被ch包含在这一行中.上述文字中的2个:
因此,=的两个参数必须具有相同的形状(或者至少,如在Y = 2的示例中,兼容的形状).否则会导致错误.
的确,这3 4 5 - 2 3是一个错误."兼容形状"的技术定义是什么?它是否像"相同的形状或标量"一样简单,还是更多呢?
我已经为函数定义了一个别名execState:
myCleverName = execState
Run Code Online (Sandbox Code Playgroud)
GHC警告说顶级绑定没有带注释的类型签名,所以我写道:
myCleverName :: State s a => s -> s
Run Code Online (Sandbox Code Playgroud)
对大多数人来说,很明显,"胖箭" =>应该是一个经常瘦的->.但是我今天才注意到,但是包含别名的模块和使用别名的代码都已编译好几周,而不是警告我使用了错误的语法.这是为什么?
谢谢!