2017-04-15 4 views
0

이것은 곧 나오는 시험의 연습 문제 중 하나이며, 출력을 실행하기 위해 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). 

이 객체 폰에 대한보다 사용되는 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 

당신의 시간

내가 당신을 위해 모든 숙제를 꺼려 해요
+1

귀하의 질문은 모든 잘못 첫 번째 블록이 더 많이 보인다.. 두 번째 블록은 들여 쓰여지지 않고 읽을 수 없습니다. –

+0

교수님이 빨아 먹지만, 내가 너에게 확신시켜 준다. –

답변

3

주셔서 감사합니다. 그러나, 주어진 코드가 유효한 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)> 

을, 나는 주어진 문제에 구문 문제를 해결

+0

선생님, 도와 주셔서 감사합니다.이게 정말 20 명의 학생처럼 도움이되었습니다. –

+0

다른 두 개를 얻었습니까? 처리기가 작동합니까? 모든 테스트 사례를 작동 시켰습니까? –

관련 문제