Name

Description of the page content

Conversion of Name to several programming languages.

Tags:

This program has been converted to 23 programming languages.

Original

Origin of name.bas:

Example included in Vintage BASIC 1.0.3.

http://vintage-basic.net/

10 INPUT"WHAT IS YOUR NAME";NAME$
20 INPUT"ENTER A NUMBER";N
30 FORI=1TON
40 ?"HELLO, ";NAME$;"!"
50 NEXT

In 8th

\ Name

\ Original version in BASIC:
\   Example included in Vintage BASIC 1.0.3.
\   http://www.vintage-basic.net

\ This version in 8th:
\   Copyright (c) 2023, Marcos Cruz (programandala.net)
\   SPDX-License-Identifier: Fair

\ Written on 2023-03-09.

\ Last modified 20231103T2334+0100.

64 constant entry_max_len

: input_number \ -- n
  null
  repeat drop
    "Enter a number" .
    entry_max_len null con:accept >n
    null? while! ;
  \ Ask the user to enter a number. If the entry cannot be converted to a number,
  \ ask again.

: input_name \ -- s
  null
  repeat drop
    "What is your name?" .
    entry_max_len null con:accept
    s:len 0 = while! ;
  \ Ask the user to enter a name. If the entry is empty, ask again.

: app:main \ --
  input_name
  input_number
  repeat
    "Hello, " . over . "!" . cr
  n:1- while
  2drop ;

In Arturo

; Name

; Original version in BASIC:
;   Example included in Vintage BASIC 1.0.3.
;   http://www.vintage-basic.net

; This version in Arturo:
;   Copyright (c) 2023, Marcos Cruz (programandala.net)
;   SPDX-License-Identifier: Fair
;
; Written on 2023-10-19.
; 
; Last modified: 20251205T0049+0100.

name: input "What is your name? "

until [
    numberString: input "Enter a number: "
    dup numeric? numberString else [ print "Number expected. Retry." ]
] []
number: floor to :floating numberString

loop range 1 number [] [ print ~"Hello, |name|" ]

In C#

// Name

// Original version in BASIC:
//  Example included in Vintage BASIC 1.0.3.
//  http://www.vintage-basic.net

// This version in C#:
//  Copyright (c) 2024, Marcos Cruz (programandala.net)
//  SPDX-License-Identifier: Fair
//
// Written on 2024-12-21.
//
// Last modified: 20251205T1543+0100.

using System;

class Name
{
    static void Main()
    {
        Console.Write("What is your name? ");
        string name = Console.ReadLine();

        double number;

        while (true)
        {
            Console.Write("Enter a number: ");
            try
            {
                number = Int64.Parse(Console.ReadLine());
                break;
            }
            catch
            {
                Console.WriteLine("Integer expected.");
            }
        }
        for (int i = 0; i < number; i++)
        {
            Console.WriteLine($"Hello, {name}!");
        }
    }
}

In C3

// Name

// Original version in BASIC:
//  Example included in Vintage BASIC 1.0.3.
//  http://www.vintage-basic.net

// This version in C3:
//  Copyright (c) 2025, Marcos Cruz (programandala.net)
//  SPDX-License-Identifier: Fair
//
// Written on 2025-03-09, 2025-03-12, 2025-03-18.
//
// Last modified: 20250731T1954+0200.

import std::io;

fn String acceptString(String prompt = "") {
    io::print(prompt);
    String! s = io::readline();
    if (catch excuse = s) {
        return "";
    } else {
        return s;
    }
}

fn int! acceptInteger(String prompt = "") {
    String s = acceptString(prompt);
    defer free(s);
    return String.to_int(s);
}

fn int acceptValidInteger(String prompt = "", String error = "Integer expected.\n") {
    while (true) {
        int! n = acceptInteger(prompt);
        if (catch excuse = n) {
            io::print(error);
        } else {
            return n;
        }
    }
}

fn void main() {

    String name = acceptString("What is your name? ");
    defer free(name);
    int number = acceptValidInteger("Enter a number: ");
    io::printfn("number=%s", number);

    for (int i = 0; i < (number); i += 1) {
        io::printfn("Hello, %s!", name);
    }

}

In Chapel

// Name

// Original version in BASIC:
//     Example included in Vintage BASIC 1.0.3.
//     http://www.vintage-basic.net

// This version in Chapel:
//     Copyright (c) 2025, Marcos Cruz (programandala.net)
//     SPDX-License-Identifier: Fair
//
// Written on 2025-04-05.
//
// Last modified: 20250405T2002+0200.

import IO;

proc acceptString(prompt: string): string {
    write(prompt);
    IO.stdout.flush();
    return IO.readLine().strip();
}

proc acceptValidInteger(prompt: string): int {
    var result: int;
    while true {
        var s: string = acceptString(prompt);
        try {
            result = s: int;
            break;
        }
        catch exc {
            writeln("Integer expected.");
        }
    }
    return result;
}

proc main() {
    var name: string = acceptString("What is your name? ");
    var number: int = acceptValidInteger("Enter a number: ");
    for 1 .. number {
        writef("Hello, %s!\n", name);
    }
}

In Crystal

# Name

# Original version in BASIC:
#     Example included in Vintage BASIC 1.0.3.
#     http://www.vintage-basic.net

# This version in Crystal:
#     Copyright (c) 2023, Marcos Cruz (programandala.net)
#     SPDX-License-Identifier: Fair
#
# Written on 2023-09-30.
#
# Last modified: 20231104T0010+0100.

def getn(prompt : String) : Float64
  while true
    print prompt
    begin
      number = gets.not_nil!.to_f
      break
    rescue
      puts "Number expected."
    end
  end
  number
end

print "What is your name? "
name = gets.not_nil!

n = getn "Enter a number: "

n.to_i.times do
  puts "Hello, #{name}!"
end

In D

// Name

// Original version in BASIC:
//     Example included in Vintage BASIC 1.0.3.
//     http://www.vintage-basic.net

// This version in D:
//     Copyright (c) 2025, Marcos Cruz (programandala.net)
//     SPDX-License-Identifier: Fair
//
// Written on 2025-03-22.
//
// Last modified: 20251219T2153+0100.

module name;

string acceptString(string prompt)
{
    import std.stdio : readln;
    import std.stdio : write;
    import std.string : strip;

    write(prompt);
    return strip(readln());
}

int acceptValidInteger(string prompt)
{
    import std.conv : to;
    import std.stdio : writeln;

    int result;
    while (true)
    {
        string s = acceptString(prompt);
        try
        {
            result = to!int(s);
            break;
        }
        catch (Exception exc)
        {
            writeln("Integer expected.");
        }
    }
    return result;
}

void main()
{
    import std.stdio : writef;

    string name = acceptString("What is your name? ");
    int number = acceptValidInteger("Enter a number: ");
    foreach (_; 0 .. number)
    {
        writef("Hello, %s!\n", name);
    }
}

In Factor

! Name

! Original version in BASIC:
!     Example included in Vintage BASIC 1.0.3.
!     http://www.vintage-basic.net

! This version in Factor:
!     Copyright (c) 2024, Marcos Cruz (programandala.net)
!     SPDX-License-Identifier: Fair

! Written in 2024-11-30/12-02.

! Last modified 20241203T0108+0100.

USING: io kernel math math.parser sequences ;

IN: name

! XXX FIXME Prompts are printed only after both inputs! But
! it works fine on the graphical interface. Bug of Factor? 

: repetitions ( -- number )
    "" [ string>number dup ] [ drop "Enter a number: " write readln ] until ;
    ! Ask the user to enter a number. If the entry cannot be converted to a number, ask again.

: name ( -- string )
    "" [ dup "" = ] [ drop "What is your name? " write readln ] while ;
    ! Ask the user to enter a name. If the entry is empty, ask again.

: salute ( -- string )
    "Hello, " name append "!" append ;

: run ( -- )
    salute repetitions swap '[ _ print ] times ;

MAIN: run

In Go

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in Go:
    Copyright (c) 2024, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written on 2024-12-31.

Last modified: 20241231T0218+0100.
*/

package main

import "fmt"
import "strconv"

func inputString(prompt string) string {

    fmt.Print(prompt)
    var s = ""
    fmt.Scanf("%s", &s)
    return s

}

func inputInt(prompt string) int {

    var number int64
    var err error
    for {
        number, err = strconv.ParseInt(inputString(prompt), 10, 0)
        if err == nil {
            break
        } else {
            fmt.Println("Integer expected.")
        }
    }
    return int(number)

}

func main() {

    var name string = inputString("What is your name? ")
    var number int = inputInt("Enter a number: ")

    for i := 0; i < number; i++ {
        fmt.Printf("Hello, %v!\n", name)
    }

}

In Hare

// Name
//
// Original version in BASIC:
//      Example included in Vintage BASIC 1.0.3.
//      http://www.vintage-basic.net
//
// This version in Hare:
//      Copyright (c) 2025, Marcos Cruz (programandala.net)
//      SPDX-License-Identifier: Fair
//
// Written in 2025-02-14/15.
//
// Last modified: 20260213T1645+0100.

// Modules {{{1
// =============================================================================

use bufio;
use fmt;
use os;
use strconv;
use strings;

// User input {{{1
// =============================================================================

fn print_prompt(prompt: str) void = {
        fmt::print(prompt)!;
        bufio::flush(os::stdout)!;
};

fn accept_string(prompt: str = "") str = {
        print_prompt(prompt);
        const buffer = match (bufio::read_line(os::stdin)!) {
                case let buffer: []u8 =>
                        yield buffer;
                case =>
                        return "";
                };
        defer free(buffer);
        return strings::dup(strings::fromutf8(buffer)!)!;
};

fn accept_integer(prompt: str = "") (int | ...strconv::error) = {
        const string: str = accept_string(prompt);
        defer free(string);
        return strconv::stoi(string);
};

fn accept_valid_integer(prompt: str = "", error: str = "Integer expected.") int = {
        for (true) {
                match (accept_integer(prompt)) {
                case let number: int =>
                        return number;
                case =>
                        fmt::println(error)!;
                };
        };
};

// Main {{{1
// =============================================================================

export fn main() void = {
        const name: str = accept_string("What is your name? ");
        defer free(name);
        const number: int = accept_valid_integer("Enter a number: ");

        for (let i = 0; i < (number): int; i += 1) {
                fmt::printfln("Hello, {}!", name)!;
        };
};

In Io

#!/usr/bin/env io

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in Io:
    Copyright (c) 2024, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written on 2024-12-03.

Last modified: 20241203T0045+0100.
*/

"What is your name? " print
name := File standardInput readLine

loop(
    "Enter a number: " print
    number := File standardInput readLine asNumber
    // N.B. Invalid inputs cause a `nan` value and don't pass the test.
    if(number > 0, break)
    "Number greater than 0 expected." println
)

number repeat(
    "Hello, " print  name print  "!" println
)

In Janet

# Name

# Original version in BASIC:
#  Example included in Vintage BASIC 1.0.3.
#  http://www.vintage-basic.net

# This version in Janet:
#  Copyright (c) 2025, Marcos Cruz (programandala.net)
#  SPDX-License-Identifier: Fair
#
# Written on 2025-12-24.
#
# Last modified 20251225T1945+0100.

(defn accept-string [prompt-text]
  (prin prompt-text)
  (string/trim (getline)))

(defn accept-integer [prompt-text]
  (def input (accept-string prompt-text))
  (def number (scan-number input))
  (if number
    (math/trunc number)
    (do
      (print "Number expected.")
      (accept-integer prompt-text))))

(defn main [& args]
  (def name (accept-string "What is your name? "))
  (def times (accept-integer "Enter a number: "))
  (for i 0 times
    (print "Hello, " name "!")))

In Julia

# Name

# Original version in BASIC:
#     Example included in Vintage BASIC 1.0.3.
#     http://www.vintage-basic.net

# This version in Julia:
#     Copyright (c) 2024, Marcos Cruz (programandala.net)
#     SPDX-License-Identifier: Fair
#
# Written on 2024-07-01.
#
# Last modified: 20240704T1050+0200.

print("What is your name? ")
name = readline()

n = 0
while true
    print("Enter a number: ")
    global n = tryparse(Int, readline())
    if isnothing(n)
        println("Number expected. Retry input line.")
    else
        break
    end
end

for _ = 1:n
    println("Hello, $(name)!")
end

In Kotlin

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in Kotlin:
    Copyright (c) 2023, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written on 2023-10-25.

Last modified: 20250420T0003+0200.
*/


// Print the given prompt, wait until the user enters a valid integer
// and return it.
fun getNumber(prompt: String): Int {
    var number: Int
    while (true) {
        try {
            print(prompt)
            number = readln().toInt()
            break
        }
        catch (e: Exception) { }
    }
    return number
}

fun main() {
    print("What is your name? ")
    val name = readln()
    var number = getNumber("Enter a number: ")
    print("Hello, $name!\n".repeat(number))
}

In Nim

#[
Name

Original version in BASIC:
  Example included in Vintage BASIC 1.0.3.
  http://www.vintage-basic.net

This version in Nim:
  Copyright (c) 2025, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written in 2025-01-16.

Last modified: 20250404T0158+0200.
]#

import std/strutils

proc main() =

  write(stdout, "What is your name? ")
  let name = readLine(stdin)

  var number: int
  while true:
    write(stdout, "Enter a number: ")
    try:
      number = parseInt(readLine(stdin))
      if number >= 0:
        break
      writeLine(stdout, "Positive integer expected.")
    except:
      writeLine(stdout, "Integer expected.")

  for _ in 1 .. number:
    writeLine(stdout, "Hello, ", name)

main()

In Odin

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in Odin:
    Copyright (c) 2023, 2025, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written in 2023-10-01/02, 2025-02.

Last modified: 20250226T2325+0100.
*/

package name

import "../lib/anodino/src/read"
import "core:fmt"

main :: proc() {

    fmt.print("What is your name? ")
    name, _ := read.a_string()
    defer delete(name)
    number : f64
    for ok := false; !ok; {
        fmt.print("Enter a number: ")
        number, ok = read.an_f64()
        if !ok do fmt.println("Number expected.")
    }
    for _ in 0 ..< int(number) do fmt.printfln("Hello, %v!", name)

}

In Pike

#! /usr/bin/env pike

// Name

// Original version in BASIC:
//  Example included in Vintage BASIC 1.0.3.
//  http://www.vintage-basic.net

// This version in Pike:
//  Copyright (c) 2025, Marcos Cruz (programandala.net)
//  SPDX-License-Identifier: Fair
//
// Written on 2025-03-08.
//
// Last modified: 20250308T1621+0100.

string accept_string(string prompt) {
    write(prompt);
    return Stdio.stdin->gets();
}

int accept_integer(string prompt) {
    // NB The casting accepts any valid integer at the start of the string
    // and ignores the rest;  if no valid integer is found at the start of
    // the string, zero is returned.
    return (int) accept_string(prompt);
}

int accept_valid_integer(string prompt) {
    int n = 0;
    while (n <= 0) {
        n = accept_integer(prompt);
        if (n <= 0) {
            write("Integer greater than zero expected.\n");
        }
    }
    return n;
}

void main() {
    string name = accept_string("What is your name? ");
    int number = accept_valid_integer("Enter a number: ");
    for (int i = 0; i < (number); i += 1) {
        write("Hello, %s!\n", name);
    }
}

In Python

# Name

# Original version in BASIC:
#     Example included in Vintage BASIC 1.0.3.
#     http://www.vintage-basic.net

# This version in Python:
#     Copyright (c) 2024, Marcos Cruz (programandala.net)
#     SPDX-License-Identifier: Fair
#
# Written on 2024-10-29.
#
# Last modified: 20241029T2042+0100.

import ast

print("What is your name? ", end = "")
name = input()

while True:
    try:
        n = ast.literal_eval(input("Enter a number: "))
        break
    except:
        print("Number expected. Retry input line.")

for _ in range(0, n):
    print(f"Hello, {name}!")

In Raku

# Name

# Original version in BASIC:
#   included in Vintage BASIC 1.0.3.
#   http://www.vintage-basic.net

# This version in Raku:
#   Copyright (c) 2024, Marcos Cruz (programandala.net)
#   SPDX-License-Identifier: Fair

# Written on 2024-12-02.

# Last modified: 20241203T1831+0100.

my $name = prompt 'What is your name? ';

my Int $number;

loop {
    try {
        $number = +prompt 'Enter a number: ';
        CATCH {
            default {
                put 'Number expected.';
                next;
            }
        }
    }
    last;
}

for 1 .. $number {
    put "Hello, $name!";
}

In Ring

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in Ring:
    Copyright (c) 2024, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written on 2024-03-18.

Last modified: 20240318T1305+0100.
*/


put "What is your name? "
get name

while true
    put "Enter a number: "
    n = getNumber()
    // NOTE: Somehow `isNumber()` does not work as expected with values
    // returned by `get` or `getNumber()`; therefore `isString()` is used
    // instead:
    if not isString(n)
        break
    else
        put "Number expected. Retry." + nl
    end
end

for i = 1 to n
    put "Hello, " + name + "!" + nl
next

In Scheme

; Name

; Original version in BASIC:
;   Example included in Vintage BASIC 1.0.3.
;   http://www.vintage-basic.net

; This version in Scheme (Bigloo):
;   Copyright (c) 2025, Marcos Cruz (programandala.net)
;   SPDX-License-Identifier: Fair
;
; Written in 2025-12-03/04.
;
; Last modified 20251224T1231+0100.

(module name)

(define (accept-string prompt)
    (display prompt)
    (read-line))

(define (accept-integer prompt)
    (let ((input (accept-string prompt)))
        (let ((number (string->number input)))
            (if number
                (truncate number)
                (begin
                    (display "Number expected.")
                    (newline)
                    (accept-integer prompt))))))

(let ((name (accept-string "What is your name? ")))
    (let ((times (accept-integer "Enter a number: ")))
        (do ((i 0 (+ i 1))) ((>= i times))
            (display (format "Hello, ~a!" name))
            (newline))))

In Swift

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in Swift:
    Copyright (c) 2025, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written on 2025-04-23.

Last modified: 20250423T1045+0200.
*/

var name = ""
while name == "" {
    print("What is your name? ", terminator: "")
    name = readLine() ?? ""
}

var number = 0
while number <= 0 {
    print("Enter a number greater than 0: ", terminator: "")
    number = Int(readLine() ?? "0") ?? 0
}

for _ in 0 ..< number {
    print("Hello, \(name)!")
}

In V

/*
Name

Original version in BASIC:
    Example included in Vintage BASIC 1.0.3.
    http://www.vintage-basic.net

This version in V:
    Copyright (c) 2025, Marcos Cruz (programandala.net)
    SPDX-License-Identifier: Fair

Written on 2025-01-03.

Last modified: 20250103T2059+0100.
*/
import os
import strconv

fn input_int(prompt string) int {
    mut n := 0
    for {
        n = strconv.atoi(os.input(prompt)) or { continue }
        break
    }
    return n
}

fn main() {
    name := os.input('What is your name? ')
    number := input_int('Enter a number: ')
    for _ in 0 .. number {
        println('Hello, ${name}!')
    }
}

Related pages

Basics off
Metaproject about the "Basics of…" projects.

External related links