Skip to content

Commit

Permalink
use pointer on go
Browse files Browse the repository at this point in the history
  • Loading branch information
stmtk1 committed May 30, 2018
1 parent 442d7f7 commit 6f0dbbc
Showing 1 changed file with 10 additions and 19 deletions.
29 changes: 10 additions & 19 deletions brain_go.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,15 @@ func create() TuringTape {
return ret
}

func increment(a TuringTape) TuringTape {
func increment(a *TuringTape) {
a.tape[a.head]++
return a
}

func decrement(a TuringTape) TuringTape {
func decrement(a *TuringTape) {
a.tape[a.head]--
return a
}

func next_var(a TuringTape) TuringTape {
func next_var(a *TuringTape) {
a.head++
if len(a.tape) <= a.head {
new_tape := make([]byte, len(a.tape) + 1000)
Expand All @@ -52,10 +50,9 @@ func next_var(a TuringTape) TuringTape {
}
a.tape = new_tape
}
return a
}

func prev_var(a TuringTape) TuringTape {
func prev_var(a *TuringTape) {
a.head--
if a.head < 0 {
new_tape := make([]byte, len(a.tape) + 1000)
Expand All @@ -69,28 +66,22 @@ func prev_var(a TuringTape) TuringTape {
a.tape = new_tape
a.head += 1000
}
return a
}

func print_var(a TuringTape) TuringTape {
func print_var(a *TuringTape) {
fmt.Printf("%c", a.tape[a.head])
return a
}

func get_var(a TuringTape) TuringTape {
return a
}

|]

convert_brainfuck :: String -> String
convert_brainfuck "" = ""

convert_brainfuck ('+':rest) = "a = increment(a)\n" ++ convert_brainfuck rest
convert_brainfuck ('-':rest) = "a = decrement(a)\n" ++ convert_brainfuck rest
convert_brainfuck ('>':rest) = "a = next_var(a)\n" ++ convert_brainfuck rest
convert_brainfuck ('<':rest) = "a = prev_var(a)\n" ++ convert_brainfuck rest
convert_brainfuck ('.':rest) = "a = print_var(a)\n" ++ convert_brainfuck rest
convert_brainfuck ('+':rest) = "increment(&a)\n" ++ convert_brainfuck rest
convert_brainfuck ('-':rest) = "decrement(&a)\n" ++ convert_brainfuck rest
convert_brainfuck ('>':rest) = "next_var(&a)\n" ++ convert_brainfuck rest
convert_brainfuck ('<':rest) = "prev_var(&a)\n" ++ convert_brainfuck rest
convert_brainfuck ('.':rest) = "print_var(&a)\n" ++ convert_brainfuck rest
-- convert_brainfuck (',':rest) = " get_var()\n" ++ convert_brainfuck rest
convert_brainfuck ('[':rest) = " for a.tape[a.head] != 0 {\n" ++ convert_brainfuck rest
convert_brainfuck (']':rest) = "}\n" ++ convert_brainfuck rest
Expand Down

0 comments on commit 6f0dbbc

Please sign in to comment.