繁体   English   中英

Elixir程序,该程序做什么?

[英]Elixir program, what does this program do?

这是即将到来的考试中的练习题之一,我不知道应该为init()写什么,以便运行输出。 如果有人可以帮助我,那将是可怕的

输出:这就是我要运行的

p1=Pawn.new(),
Obj.call(p1,{:goto, 1, 2}),
1=Obj.call(p1, :x),
2=Obj.call(p1, :y),
Obj.call(p1,{:moveDelta , 3, 1}),
4=Obj.call(p1, :x ) ,
3=Obj.call(p1 ,:y ).  

在下面添加必要的代码以支持上面用于对象pawn的API:

函数:我需要在这里填写init()函数。

defmodule Obj do

def call(obj,msg) do
send obj,{self(), msg}

receive do
Response -> Response
end
   end
      end

defmodule Pawn do
def new(), do: spawn(__MODULE__,:init, [] ).
def init() do: // fill this out

感谢您的时间

我不愿意为您做所有功课。 但是,鉴于给出的代码不是有效的Elixir,我将为您提供部分解决方案。 我已经实现了:goto:x处理程序。 您应该能够弄清楚如何编写:moveDelta:y处理程序。

defmodule Obj do
  def call(obj, msg) do
    send obj, { self(), msg }

    receive do
      response -> response
    end
  end
end

defmodule Pawn do
  def new(), do: spawn(__MODULE__,:init, [] )
  def init(), do: loop({0,0})
  def loop({x, y} = state) do
    receive do
      {pid, {:goto, new_x, new_y}} -> 
        send pid, {new_x, new_y}
        {new_x, new_y}
      {pid, {:moveDelta, dx, dy}} -> 
        state = {x + dx, y + dy}
        send pid, state
        state
      {pid, :x} -> 
        send pid, x
        state
      {pid, :y} -> 
        send pid, y
        state
    end
    |> loop
  end
end

p1=Pawn.new()
Obj.call(p1,{:goto, 1, 2})
1=Obj.call(p1, :x)
2=Obj.call(p1, :y)
Obj.call(p1,{:moveDelta , 3, 1})
4=Obj.call(p1, :x ) 
3=Obj.call(p1 ,:y ) 

代码运行。 这是您提供的测试用例的输出(在我修复了语法问题之后:

iex(5)> p1=Pawn.new()
#PID<0.350.0>
iex(6)> Obj.call(p1,{:goto, 1, 2})
{1, 2}
iex(7)> 1=Obj.call(p1, :x)
1
iex(8)> 2=Obj.call(p1, :y)
2
iex(9)> Obj.call(p1,{:moveDelta , 3, 1})
{4, 3}
iex(10)> 4=Obj.call(p1, :x )
4
iex(11)> 3=Obj.call(p1 ,:y )
3
iex(12)>

另外,我修复了给定问题中的语法问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM