パスワードを忘れた? アカウント作成
6372164 journal
プログラミング

t-nissieの日記: 【電脳】Erlangで遊んでみた 2日目 その2 リスト内包表記,foldl

日記 by t-nissie

[{item, quantity, price}, ...] という形式の買い物リストを考える.このとき,
[{item, subtotal}, ...] という形式の小計リストを構築するリスト内包表記を
書け.ただし,subtotalはquantity*priceである.さらにsubtotalの総和
を求めるにはどうしたらよいか.

accounting.erl(末尾再帰を使って書けるというか,foldlが末尾再帰になるというか.)

-module(accounting).
-export([sum_up/1]).
sum_up_tr([],Sum) -> Sum;
sum_up_tr([{_Product,Subtotal}|T],Sum) -> sum_up_tr(T,Sum+Subtotal).
sum_up(Subtotals) ->
     sum_up_tr(Subtotals,0.0).

実行.Emacsではerlang-compile(C-cC-kにバインドされている)で編集中のファイルを
erlang-shellでコンパイルできる.

Erlang R15B02 (erts-5.9.2) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
 
Eshell V5.9.2  (abort with ^G)
1> c("/Users/takeshi/erlang/7languages7weeks/modules/accounting", [{outdir, "/Users/takeshi/erlang/7languages7weeks/modules/"}]).
c("/Users/takeshi/erlang/7languages7weeks/modules/accounting", [{outdir, "/Users/takeshi/erlang/7languages7weeks/modules/"}]).
{ok,accounting}
2> Cart = [{pencil, 4, 0.25}, {pen, 1, 1.20}, {paper, 2, 0.20}].
[{pencil,4,0.25},{pen,1,1.2},{paper,2,0.2}]
3> Subtotals = [{Product, Quantity*Price} || {Product, Quantity, Price} <- Cart].
[{pencil,1.0},{pen,1.2},{paper,0.4}]
4> accounting:sum_up(Subtotals).
2.6
5>  lists:foldl(fun({_Product,Subtotal},Sum) -> Sum+Subtotal end, 0, Subtotals).
2.6
6>

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...