我非常喜欢Haskell新手,如果答案很明显,我很抱歉,但我正在通过Typeclassopedia努力更好地理解类别.在为Functors部分做练习时,我遇到了这个问题:
举一个类型* - >*的例子,它不能成为Functor的一个实例(不使用undefined).
我的第一个想法是定义某种无限递归的fmap定义,但这undefined与定义中使用的那个基本上不一样吗?
如果有人能够解释答案,我将不胜感激.
谢谢!
原创练习的来源,第3部分:http://www.haskell.org/haskellwiki/Typeclassopedia#Introduction
我正在尝试学习Haskell,所以我决定编写一个简单的程序来模拟太阳周围行星的轨道,但是我遇到了从模拟打印出坐标的问题,我的代码中的顶级函数如下:
runSim :: [Body] -> Integer -> Double -> [Body]
runSim bodys 0 dtparam = bodys
runSim bodys numSteps dtparam = runSim (map (integratePos dtparam . integrateVel dtparam (calculateForce bodys)) (numSteps-1) dtparam
main = do
let planets = runSim [earth, sun] 100 0.05
print planets
"Body"只是一个保持行星位置,速度等的数据类型,因此第一个参数只是模拟中的行星列表,其他参数分别是要积分的步数和时间步长.我的问题是,在每次调用runsim之后,如何修改代码以打印出所有身体的位置?我尝试将"printInfo"函数添加到传递给map的组合函数中,如下所示:
printInfo :: Body -> Body
printInfo b = do
putStrLn b
b
但它没有编译,任何人都可以给我一些提示吗?
谢谢!
我将一个形状表示为3D中的一组坐标,我试图围绕一个轴旋转整个对象(在这种情况下是Z轴,但是一旦我开始工作,我想绕所有三个旋转) .
我用旋转矩阵写了一些代码来做到这一点:
//Coord is a 3D vector of floats
//pos is a coordinate
//angles is a 3d vector, each component is the angle of rotation around the component axis
//in radians
Coord<float> Polymers::rotateByMatrix(Coord<float> pos, const Coord<float> &angles)
{
float xrot = angles[0];
float yrot = angles[1];
float zrot = angles[2];
//z axis rotation
pos[0] = (cosf(zrot) * pos[0] - (sinf(zrot) * pos[1]));
pos[1] = (sinf(zrot) * pos[0] + cosf(zrot) * pos[1]);
return pos;
}
Run Code Online (Sandbox Code Playgroud)
下图显示了在尝试旋转之前我试图旋转的对象(向下看Z轴),每个小球体表示我正在尝试旋转的坐标之一
alt text http://www.cs.nott.ac.uk/~jqs/notsquashed.png
通过以下代码为对象执行旋转: …
我正在尝试编译一个具有标准构建过程的软件,例如
configure
make
make install
Run Code Online (Sandbox Code Playgroud)
该软件需要一个库,例如libreq.so,它安装在/ usr/local/lib中.但是,我的问题是我想构建软件并将其链接到我在/ home/user/mylibs中安装的同一个库的不同版本(我也有库的源代码).
我的问题是,如何编译和链接软件与/ home/user/mylibs中的库而不是/ usr/local/lib中的库
我尝试将"LD_LIBRARY_PATH"设置为包含/ home/user/mylibs,但这不起作用.
谢谢!