小编ned*_*wed的帖子

Erlang - 如何在新行上打印列表结果?

我有以下函数,它接受一个整数列表并只返回该列表中的偶数。

 even_print(List)->
          [X||X <- List, even == even_odd(X)].
Run Code Online (Sandbox Code Playgroud)

如何在这样的新行中打印结果:

216> seq_erlang:even_print([2,4,5]).
2
4
Run Code Online (Sandbox Code Playgroud)

而不是这个:

216> seq_erlang:even_print2([2,4,5]).
[2,4]
Run Code Online (Sandbox Code Playgroud)

io:format("~p~n",X)在我的列表理解中使用过,但我的变量 X 当然变得未绑定。

erlang list-comprehension

4
推荐指数
1
解决办法
2467
查看次数

Erlang:为什么取消注册进程ID后我的进程仍在运行?

即使我注销sts,我的生成过程也不会停止。如何不使用gen_server停止它?

start() ->
  case whereis(sts) of
    undefined ->
      PidA = spawn(dist_erlang, init,[]),
      register(sts, PidA),
      {ok,PidA};
    _ ->
      {ok,whereis(sts)}
  end.

stop() ->
   case whereis(sts) of
     undefined -> 
        already_stopped;
     _ ->
        unregister(sts),
        stopped,
  end.
Run Code Online (Sandbox Code Playgroud)

erlang server

1
推荐指数
1
解决办法
593
查看次数

Erlang,为什么我的模式匹配不适用于方程内的方程?

我有一个评估函数(expr_eval/1),它应该评估一个表达式并返回一个数字.到目前为止,我的函数返回有效数字,如:

expr_eval({plus,{num, 17},{num,10}}) ? 27
Run Code Online (Sandbox Code Playgroud)

但不是这个:

expr_eval({mul,{plus,{num,5},{num,8}},{num,3}}) ? 39
Run Code Online (Sandbox Code Playgroud)

我的职责:

   expr_eval({mul, {num,A}, {num,B}}) ->A*B;
   expr_eval({plus, {num,A}, {num,B}}) ->A+B;
   expr_eval({minus, {num,A},{num,B}}) ->A-B;
   expr_eval({_,_,_})->nothing_matched.
Run Code Online (Sandbox Code Playgroud)

我知道它只是按原样采用模式,但我该如何解决这个问题呢?我可以硬编码并将下面的代码添加到我的函数中,上面的方程式可以正常工作,但它不适用于其他方程式.(例如expr_eval({minus,{plus,{num,5},{num,8} },{num,3}})→8)

expr_eval({mul, {plus,{num,A},{num,B}},{num,C}}) ->(A+B)*C;
Run Code Online (Sandbox Code Playgroud)

erlang recursion pattern-matching

0
推荐指数
1
解决办法
89
查看次数