嗨,我有一个奇怪的问题,在Windows上的Erlang我正在运行16B和WinXP。
我有以下代码
-module(test). -export([cost/1,total/1]). cost(orange) -> 5; cost(apple) -> 6. total(L) -> [cost(I) * Q || {I,Q} <- L].
我运行它
test:total([{orange,2}]).
它给了我“\ f”
改变成本(I)* Q使用 – ,+或分数给我一个数字。
我不知道为什么在列表理解中不成功。 运行
[test:cost(I) * Q || {I,Q} <- [{orange,2}]]
在一个erlang控制台和emacs模式也不能工作,但
test:cost(orange) * 2
确实给了我一个数字。
任何想法为什么?
注意你的成本/ 1函数返回一个数字。 但总数/ 1返回一个列表 (数字)。 这个列表上的结果是可以的,这就是erlang碰巧显示小整数列表的结果。 请参阅http://www.erlang.org/faq/problems.html 9.3
看看我的意思,尝试更大的数字
test:total([{orange,2000}]).
再次,这只是一个显示问题,列表中的值是你所期望的。 尝试一下:
[Value] = test:total([{orange,2}]). Value.
一个字符串是一个整数列表。 你要返回的值是一个整数列表。
Erlang使用简单的启发式来显示某个字符串或整数列表:它是一个只包含范围{55,250}内的数字的平面列表。 (我把这些数字加起来,但是是这样的,如果有控制字符或者低字符,就保存)。
由于Erlang不会对元组做这件事,所以元组很容易看清。
1> {72,101,108,108,111,44,32,83,116,101,112,104,101,110,46}. {72,101,108,108,111,44,32,83,116,101,112,104,101,110,46} 2> [72,101,108,108,111,44,32,83,116,101,112,104,101,110,46]. "Hello, Stephen."
Erlang只是错误地猜测列表中的内容。
HTH。