2017-04-15 9 views
0

これは、今後の試験の練習問題の1つです。出力を実行するためには、init()のために何を書くべきか分かりません。 誰かがエリクサープログラム、このプログラムは何をしますか?

出力かっこいいだろうと、私を助けることができる場合:これは私がオブジェクトポーンのために上記で使用API​​をサポートするために、以下に必要なコードを追加します

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). 

を実行してどうなるかです:

関数:ここに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 

私はあなたのためのすべての宿題をやるには消極的だお時間を

+1

ご質問はすべて間違っている最初のブロックは、より多くのを探します。 –

+0

私の教授は吸血鬼ですが、エリクサーです –

答えて

3

、ありがとうございました。しかし、与えられたコードが有効なエリクサーではないので、私はあなたに部分的な解決策を提供します。私は: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)> 

はまた、私は与えられた問題で、構文の問題を修正し

+0

先生、助けてくれてありがとうございます。これは本当に20人の学生のように助けました –

+0

あなたは他の2つを手に入れましたか?ハンドラは機能しますか?すべてのテストケースが機能しましたか? –

関連する問題