Interactive programming (repl): Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
(not incorrect: the task does not require the use of join-with-separators (and doing so would distract from the purpose of the task))
Line 9: Line 9:


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
{{incorrect|Lisp|This is [[String concatenation]], not a String Joining.}}


The details of interactive use vary widely between implementations. This example is from [[SBCL]]. <code>*</code> is the prompt.
The details of interactive use vary widely between implementations. This example is from [[SBCL]]. <code>*</code> is the prompt.
Line 41: Line 40:


=={{header|Haskell}}==
=={{header|Haskell}}==
{{incorrect|Haskell|This is [[String concatenation]], not a String Joining.}}


The details of interactive use vary widely between implementations. This example is from [[GHC|GHCi]].
The details of interactive use vary widely between implementations. This example is from [[GHC|GHCi]].

Revision as of 02:56, 22 February 2009

Task
Interactive programming (repl)
You are encouraged to solve this task according to the task description, using any language you may know.

Many languages come with a command line interpreter or shell.

Show how to start the interpreter, then interactively create a function of two strings and a separator that returns the strings separated by two concatenated instances of the separator.

For example, f('Rosetta', 'Code', ':') should return 'Rosetta::Code'

Note: this task is not about creating your own interpreter.

Common Lisp

The details of interactive use vary widely between implementations. This example is from SBCL. * is the prompt.

$ rlwrap sbcl
This is SBCL 1.0.25, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
...
* (defun f (string-1 string-2 separator)
    (concatenate 'string string-1 separator separator string-2))

F
* (f "Rosetta" "Code" ":")

"Rosetta::Code"
*

E

<lang sh>$ rune # from an OS shell. On Windows there is also a desktop shortcut.</lang>

"?" and ">" are prompts for input; everything else is output.

<lang e>? def f(string1 :String, string2 :String, separator :String) { > return separator.rjoin(string1, "", string2) > }

  1. value: <f>

? f("Rosetta", "Code", ":")

  1. value: "Rosetta::Code"

</lang>

Haskell

The details of interactive use vary widely between implementations. This example is from GHCi.

$ ghci
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.4.2, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base-1.0 ... linking ... done.
Prelude> let f as bs sep = as ++ sep ++ sep ++ bs
Prelude> f "Rosetta" "Code" ":"
"Rosetta::Code"

Python

Start the interpreter by typing python at the command line (or select it from a menu). You get a response showing the version of the interpreter being run before giving an input prompt of three greater-than characters and a space:

<lang python>python Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> def f(string1, string2, separator): return separator.join([string1, , string2])

>>> f('Rosetta', 'Code', ':') 'Rosetta::Code' >>> </lang>

Ruby

Start the interpreter by typing irb at the command line. You will see an input prompt, which by default is name of this program(name of main object):line number:indent level> :

<lang ruby>$ irb irb(main):001:0> def f(string1, string2, separator) irb(main):002:1> [string1, , string2].join(separator) irb(main):003:1> end => nil irb(main):004:0> f('Rosetta', 'Code', ':') => "Rosetta::Code" irb(main):005:0> </lang>