Basics of Racket
Descrition del contenete del págine
Conversion de old BASIC-programas a Racket por aprender lu elementari de ti-ci lingue.
Etiquettes:
3D Plot
#! /usr/bin/env racket
#|
3D Plot
Original version in BASIC:
Creative Computing (Morristown, New Jersey, USA), ca. 1980.
This version in Racket:
Copyright (c) 2024, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2024-12-06.
Last modified: 20260106T0841+0100.
|#
#lang racket
(define (move-cursor-home)
(display "\e[H"))
(define (clear-screen)
(display "\e[2J")
(move-cursor-home))
(define (display-credits)
(displayln "3D Plot\n")
(displayln "Original version in BASIC:")
(displayln " Creative computing (Morristown, New Jersey, USA), ca. 1980.\n")
(displayln "This version in Racket")
(displayln " Copyright (c) 2024, Marcos Cruz (programandala.net)")
(displayln " SPDX-License-Identifier: Fair\n")
(display "Press Enter to start the program. ")
(void (read-line)))
(define (a z)
(* 30 (exp (/ (* (- z) z) 100))))
(define (draw)
(define l 0)
(define z 0)
(define y1 0)
(define line-width 56)
(define line (make-string line-width #\space))
(for ([x (in-range -30.0 30.5 1.5)])
(set! l 0)
(set! y1 (* 5 (exact-floor (/ (sqrt (- 900 (* x x))) 5))))
(for ([y (in-range y1 (+ (- y1) -5) -5)])
(set! z (exact-floor (- (+ 25 (a (sqrt (+ (* x x) (* y y))))) (* 0.7 y))))
(when (> z l)
(begin
(set! l z)
(string-set! line z #\*))))
(displayln line)
(string-fill! line #\space)))
(clear-screen)
(display-credits)
(clear-screen)
(draw)
Diamond
#! /usr/bin/env racket
#|
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Racket:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-08-22/23.
Last modified 20260106T0911+0100.
|#
#lang racket/base
(define lines 17)
(for ([i (in-range 1 (+ (/ lines 2) 1))])
(for ([j (in-range 0 (+ (- (/ (+ lines 1) 2) i) 1))])
(write-string " "))
(for ([j (in-range 0 (- (* i 2) 1))])
(write-string "*"))
(write-string "\n"))
(for ([i (in-range 1 (/ lines 2))])
(for ([j (in-range 0 (+ i 1))])
(write-string " "))
(for ([j (in-range 0 (- (* (- (/ (+ lines 1) 2) i) 2) 1))])
(write-string "*"))
(write-string "\n"))
Sine Wave
#! /usr/bin/env racket
#|
Sine Wave
Original version in BASIC:
Creative Computing (Morristown, New Jersey, USA), ca. 1980.
This version in Racket:
Copyright (c) 2023, 2024, 2026, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-08, 2023-09, 2024-12, 2026-01.
Last modified 20260106T0922+0100.
|#
#lang racket
(define (move-cursor-home)
(display "\e[H"))
(define (clear-screen)
(display "\e[2J")
(move-cursor-home))
(define (display-credits)
(clear-screen)
(displayln "Sine Wave\n")
(displayln "Original version in BASIC:")
(displayln " Creative Computing (Morristown, New Jersey, USA), ca. 1980.\n")
(displayln "This version in Racket:")
(displayln " Copyright (c) 2023, 2024, Marcos Cruz (programandala.net)")
(displayln " SPDX-License-Identifier: Fair\n")
(display "Press Enter to start the program. ")
(void (read-line)))
(define word (vector "" ""))
(define order (vector "first" "second"))
(define (get-words)
(clear-screen)
(for ([w (in-range 0 2)])
(printf "Enter the ~a word: " (vector-ref order w))
(vector-set! word w (read-line))))
(define (boolean->integer b)
(count values (list b)))
(define (draw)
(clear-screen)
(define even #f)
(for ([a (in-range 0.0 40.25 0.25)])
(display (make-string (exact-floor (+ (* (sin a) 25) 26)) #\space))
(displayln (vector-ref word (boolean->integer even)))
(set! even (not even))))
(display-credits)
(get-words)
(displayln "")
(draw)
