设计/构建大型功能程序的好方法是什么,特别是在Haskell中?
我已经阅读了很多教程(自己写一个方案是我最喜欢的,真实世界Haskell紧随其后) - 但大多数程序都相对较小,而且是单一目的.另外,我不认为它们中的一些特别优雅(例如,WYAS中的大量查找表).
我现在想要编写更大的程序,包含更多移动部件 - 从各种不同来源获取数据,清理数据,以各种方式处理数据,在用户界面中显示,持久化,通过网络进行通信等.一个最好的结构,这样的代码是易读,可维护,适应不断变化的要求?
有大量文献针对大型面向对象的命令式程序解决这些问题.像MVC,设计模式等的想法是实现广泛目标的理想规定,例如在OO风格中分离关注点和可重用性.此外,较新的命令式语言适合于"随着您的成长而设计"的重构风格,在我的新手看来,Haskell似乎不太适合.
Haskell有相同的文献吗?如何在功能性编程(单子,箭头,应用等)中使用异域控制结构的动物园最好地用于此目的?你能推荐什么最佳实践?
谢谢!
编辑(这是Don Stewart回答的后续行动):
@dons提到:"Monads在类型中捕获关键的建筑设计."
我想我的问题是:如何在纯函数式语言中考虑关键的架构设计?
考虑几个数据流的示例和几个处理步骤.我可以将数据流的模块化解析器编写为一组数据结构,我可以将每个处理步骤实现为纯函数.一个数据所需的处理步骤将取决于其值和其他数据.一些步骤之后应该是GUI更新或数据库查询等副作用.
什么是以正确方式绑定数据和解析步骤的"正确"方法?人们可以编写一个大功能,为各种数据类型做正确的事情.或者可以使用monad来跟踪到目前为止已处理的内容,并让每个处理步骤从monad状态获得接下来需要的任何内容.或者可以写很多单独的程序并发送消息(我不太喜欢这个选项).
他链接的幻灯片有一个我们需要的东西子弹:"将设计映射到类型/函数/类/ monad上的成语".什么是成语?:)
我一直在探索Stack Overflow数据转储,因此利用友好的XML和正则表达式"解析".我尝试使用各种Haskell XML库来查找特定用户按文档顺序排列的第一篇文章都遭遇了令人讨厌的颠簸.
import Control.Monad
import Text.HTML.TagSoup
userid = "83805"
main = do
posts <- liftM parseTags (readFile "posts.xml")
print $ head $ map (fromAttrib "Id") $
filter (~== ("<row OwnerUserId=" ++ userid ++ ">"))
posts
Run Code Online (Sandbox Code Playgroud)
import Text.XML.HXT.Arrow
import Text.XML.HXT.XPath
userid = "83805"
main = do
runX $ readDoc "posts.xml" >>> posts >>> arr head
where
readDoc = readDocument [ (a_tagsoup, v_1)
, (a_parse_xml, v_1)
, (a_remove_whitespace, v_1)
, (a_issue_warnings, v_0)
, (a_trace, v_1)
]
posts …
Run Code Online (Sandbox Code Playgroud) 我有一个大文件(4 +演出),简单地说,4字节浮点数.我想将它视为List,在某种意义上我希望能够使用map,filter,foldl等.但是,我想将输出写回输入,而不是生成带有输出的新列表.该文件,因此只需要在内存中加载一小部分文件.你可以说我是一个名为MutableFileList的类型
有没有人遇到过这种情况?而不是重新发明轮子我想知道是否有一个Hackish方式来处理这个?
我需要优化由2D网格点表示的表面,以产生与提供的目标法向量对齐的表面的法向矢量.网格大小可能介于201x201和1001x1001之间.这意味着变量的数量将是40,000到1,000,000,因为我只修改网格点的z坐标.
我正在使用Ceres框架,因为它应该在大规模非线性优化问题上表现出色.我已经尝试过MATLAB的fmincon,但它使用了大量的内存.我写了一个适用于小网格的目标函数(在3x3和31x31成功).但是,当我尝试编译具有大网格大小(157x200)的代码时,我看到下面的错误.我已经读到这是Eigen的限制.但是,当我告诉Ceres使用LAPACK而不是Eigen时,我得到大型矩阵的相同错误.我试过这些线:
options.dense_linear_algebra_library_type = ceres::LAPACK;
options.linear_solver_type = ceres::DENSE_QR;
Run Code Online (Sandbox Code Playgroud)
这些告诉求解器使用LAPACK和DENSE_QR,因为使用3x3网格的输出显示:
Minimizer TRUST_REGION
Dense linear algebra library LAPACK
Trust region strategy LEVENBERG_MARQUARDT
Given Used
Linear solver DENSE_QR DENSE_QR
Threads 1 1
Linear solver threads 1 1
Run Code Online (Sandbox Code Playgroud)
但是,当我使用大参数时,我仍然会得到Eigen的错误.
无论如何,我真的可以使用一些帮助.如何让Ceres优化大量变量(> 30,000)?提前致谢
链接到Ceres:http://ceres-solver.org
链接到Eigen:http://eigen.tuxfamily.org/dox/
错误:
In file included from /usr/include/eigen3/Eigen/Core:254:0,
from /usr/local/include/ceres/jet.h:165,
from /usr/local/include/ceres/internal/autodiff.h:145,
from /usr/local/include/ceres/autodiff_cost_function.h:132,
from /usr/local/include/ceres/ceres.h:37,
from /home/ubuntu/code/surfaceopt/surfaceopt.cc:10:
/usr/include/eigen3/Eigen/src/Core/DenseStorage.h: In instantiation of ‘Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, Alignment>::plain_array() [with T = double; int Size = 31400; int MatrixOrArrayOptions = …
Run Code Online (Sandbox Code Playgroud) 只是想知道,因为我们每台PC达到1 teraflop,但我们仍然无法模拟昆虫的大脑.有没有人看到过自我学习,自我发展的神经网络的体面实施?
artificial-intelligence biological-neural-network neuroscience neural-network large-scale
我有一个大的数据框(约3000万行)。我有一个功能f
。要做的事情f
是遍历每一行,检查一些逻辑并将输出馈送到字典中。该功能需要逐行执行。
我试过了:
dic = dict()
for row in df.rdd.collect():
f(row, dic)
但是我总是遇到错误OOM。我将Docker的内存设置为8GB。
如何有效开展业务?
非常感谢
我正在使用以龙卷风为核心的mongodb数据库后端.我目前只有我的主文件中有一堆处理程序.它是一个多用户webapp,在用户之间有链接,也就是"朋友"系统.
My current structure is:
templates/
static/
main.py (contains all handlers)
user_actions.py
auth_actions.py
.
.
.
bar_actions.py
Run Code Online (Sandbox Code Playgroud)
大多数处理程序对应于动作文件.例如,友元请求处理程序对应于user_actions.py中的函数,该函数接受数据库和userids作为参数.我觉得这不是这么大项目的最佳布局.我是否应该有某种类型的模型文件包含当前用户的模型,或者这只是多余的.我目前正在将当前用户存储为cookie中的字典.
开发大型项目(社交网络)是否合理,在ASP.NET MVC中每天处理数百万次访问.我想在那种情况下,网站的性能将非常缓慢.我需要一些建议.在性能和可扩展性方面,构建社交网络的最佳选择是什么?可以在ASP MVC中构建它还是不错的选择?例如,使用Ruby on Rails可能会更好吗?你觉得怎么样?提前致谢!)
large-scale ×8
haskell ×3
asp.net-mvc ×1
c++ ×1
eigen ×1
lapack ×1
large-data ×1
large-files ×1
monads ×1
neuroscience ×1
optimization ×1
pyspark ×1
python ×1
scalability ×1
structure ×1
tag-soup ×1
tornado ×1
xml ×1