0

标题可能已关闭一个log_norm/1名为列表。

log_norm(List) ->
    log_norm(List,[]).
log_norm([], Newlist) ->
    lists:reverse(Newlist);
log_norm([Input|T], Newlist) ->
    X = math:log(Input/???), % ??? should be the previous head of the list Input-1. 
    log_norm(T, [X|Newlist]).

遍历到列表的新“头”后,如何获取上一个“头”或输入?

4

3 回答 3

0

我认为这会奏效。

log_norm(List = [_H1,_H2|_T]) ->
    log_norm(List,[]);
log_norm(_) ->
    bad_argument.

log_norm([Input_prev,Input], Newlist) ->
    X = math:log(Input/Input_prev), 
    lists:reverse([X|Newlist]);
log_norm([Input_prev,Input|T], Newlist) ->
    X = math:log(Input/Input_prev), 
    log_norm([Input|T], [X|Newlist]).
于 2013-08-13T11:41:04.363 回答
0

我还通过添加 2 个参数、原始列表和一个计数器 N 创建了一个解决方案,用于使用列表获取前一个:nth() :D

 log_norm(List) ->
        log_norm(List,[], List, 0).
    log_norm([], Newlist, _,_) ->
        lists:reverse(Newlist);
    log_norm([Input|T], Newlist, OrigList, N) ->
        if
            N == 0 -> X = math:log(Input/Input);
            true -> X = math:log(Input/lists:nth(N, OrigList))
        end,
        log_norm(T, [X|Newlist], OrigList, N+1).
于 2013-08-13T12:33:59.500 回答
-1

使用高清()。

log_norm(List) ->
    log_norm(List,[]).
log_norm([Input,Last], Newlist) ->
    X =math:log(Input/Last),
    lists:reverse([X|Newlist]);
log_norm([Input|T], Newlist) ->
    X = math:log(Input/hd(T)), 
    log_norm(T, [X|Newlist]).
于 2013-08-13T11:27:27.163 回答