在Erlang中打印一个特殊字符

时间:2016-04-04 20:10:13

标签: erlang

我是Erlang的新手,我想知道是否有一种方法可以在没有''的情况下打印#输出等特殊字符,我想打印#,相关代码是:

case {a(N),b(N)} of
    {false,_} -> {false,'#'};

但是输出看起来像:{false,'#'},有没有办法获得#而不是'#'?

2 个答案:

答案 0 :(得分:2)

在Erlang中,单引号用于表示原子。所以'#'变成原子而不是特殊字符。

您可能必须使用代表$#字符的#来考虑该值,或者#34;#"将表示一个字符串(字符串是Erlang中的字符列表)。

在这种情况下,{false, $#}将导致{false, 35}(Ascii值为$#)。 如果要打印字符,则需要使用io:format

1> io:format("~c~n",[$#]).
#
ok

如果你使用字符串(字符列表),那么:

2> io:format("~s~n",["#"]).
#
ok

如果ok是io:format的返回值。

答案 1 :(得分:0)

使用您给出的示例,您不打印任何内容,您显示的是shell将自动输出的内容:最后一个语句的结果。如果要打印具有给定格式的内容,则必须调用io函数:

1> io:format("~p~n",["#"]). % the pretty print format will show you are printing a string
"#"
ok
2> io:format("~s~n",["#"]). % the string format is used to print strings as text
#
ok
3> io:format("~c~n",[$#]). % the character format is used to print a charater as text 
#
ok
4> io:format("~p~n",[{{false,$#}}]). % note that a character is an integer in erlang.
{{false,35}}
ok
5> io:format("~p~n",[{{false,'#'}}]). % '#' is an atom, not an integer, it cannot be print as # without '
                                      % because it doesn't start by a lower case character, and also
                                      % because # has a special meaning in erlang syntax
{{false,'#'}}
ok
6> io:format("~p~n",[{{false,'a#'}}]).
{{false,'a#'}}
ok
7> io:format("~p~n",[{{false,'ab'}}]).
{{false,ab}}
ok
8> io:format("~p~n",[{{false,a#}}]).  
* 1: syntax error before: '}'
8>

请注意,每次shell打印最后一个语句的结果时:io:format / 2返回ok