Print itself

Revision as of 09:01, 8 June 2020 by PureFox (talk | contribs) (Added Go)

Create a program, which prints it's source code to the stdout!

Print itself is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Furor

A very short solution, using some special features of Furor: <lang Furor> "#s sto selfstring QUOTE @selfstring dup print QUOTE NL printnl end { „selfstring” }"

  1. s sto selfstring QUOTE @selfstring dup print QUOTE NL printnl end { „selfstring” }

</lang> And behold, here is a more complex but "traditional" solution of this famous task, solved by 3 loops: <lang Furor>

  1. g §vége §eleje - tokensize / sto maxlines
  2. s

7 {| {} §eleje[] printnl |}

 @maxlines {|  {} §eleje[] QUOTE print QUOTE NL |}

7 @maxlines {|| {} §eleje[] printnl |} end eleje: "#g §vége §eleje - tokensize / sto maxlines" "#s" "7 {| {} §eleje[] printnl |}" " @maxlines {| {} §eleje[] QUOTE print QUOTE NL |}" "7 @maxlines {|| {} §eleje[] printnl |}" "end" "eleje:" "vége:" "{ „selfstring” }" "{ „maxlines” }" vége: { „selfstring” } { „maxlines” } </lang>

Go

<lang go>package main

import (

   "fmt"
   "io/ioutil"
   "log"
   "os"
   "path"

)

func main() {

   self := path.Base(os.Args[0]) + ".go"
   bytes, err := ioutil.ReadFile(self)
   if err != nil {
       log.Fatal(err)
   }
   fmt.Print(string(bytes))

}</lang>

Output:

Just the invoking line as remainder is, of course, as above.

$ go run self_print.go