【发布时间】:2012-08-10 05:44:46
【问题描述】:
我正在学习 uni 的数据结构课程,我正在努力理解它。我对 C 中的递归和循环有一个大致的了解,但我无法理解如何在 erlang 中实现循环。例如,我在 c 中的一个程序中有以下循环:
int ii;
double cos_lat[8];
for(ii = 2, cos_lat[1] = cos(lat); ii <= 7;; ii++)
{
cos_lat[ii] = cos_lat[1] * cos_lat[ii-1]
}
而且我不知道如何在 erlang 中实现它。 我知道我必须创建自己的循环定义,例如:
for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I)|for(I+1, Max, F)].
(取自实用的erlang)
然后调用如下:
for(2,7,fun(ii) -> // this is where i get stuck.
我认为我必须在数组(例如列表)上使用不同的数据结构,但我不确定如何访问列表。
感谢您的回复。只是一个更新(14/8)。我尝试对代码进行如下递归:
-module(cos1).
-export([cos_lat/1]).
cos_lat(Base, Iterator, Prev) -> [Base*Prev|cos_lat(Base,Iterator+1,Base*Prev)];
cos_lat(Base, 7, Prev) -> [].
并按如下方式调用它:
cos1:cost_lat(cos(lat),2,cos(lat).
但它就是不想工作! Erlang 真是一门令人困惑的语言。
【问题讨论】:
-
请注意,这可能不是理解算法的最佳方式。您最好尝试理解算法的含义并以功能方式重新实现它,而不是机械地尝试移植命令式代码。