ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# javieracevedo's solution

## to Hello World in the Scheme Track

Published at Nov 10 2019 · 0 comments
Instructions
Test suite
Solution

#### Note:

This exercise has changed since this solution was written.

The classical introductory exercise. Just say "Hello, World!".

"Hello, World!" is the traditional first program for beginning programming in a new language or environment.

The objectives are simple:

• Write a function that returns the string "Hello, World!".
• Run the test suite and make sure that it succeeds.
• Submit your solution and check it at the website.

If everything goes well, you will be ready to fetch your first real exercise.

## Track Specific Notes

Your solution may be a procedure that returns the desired string or a variable whose value is that string.

## Running and testing your solutions

### From the command line

Simply type `make chez` if you're using ChezScheme or `make guile` if you're using GNU Guile. Sometimes the name for the scheme binary on your system will differ from the defaults. When this is the case, you'll need to tell make by running `make chez chez=your-chez-binary` or `make guile guile=your-guile-binary`.

### From a REPL

• Enter `(load "test.scm")` at the repl prompt.
• Develop your solution in `hello-world.scm` reloading as you go.
• Run `(test)` to check your solution.

## Source

This is an exercise to introduce users to using Exercism http://en.wikipedia.org/wiki/%22Hello,_world!%22_program

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### test.scm

``````(import (rnrs))

(define test-fields '(input output who))

(define (test-run-solution solution input)
(if (procedure? solution) (apply solution input) solution))

(define (test-success description success-predicate
procedure input output)
(call/cc
(lambda (k)
(with-exception-handler
(lambda (e)
(k `(fail
(description . ,description)
(input . ,input)
(output . ,output)
(who . ,procedure))))
(lambda ()
(let ([result (test-run-solution procedure input)])
(unless (success-predicate result output)
(error 'exercism-test
"test fails"
description
input
result
output)))
`(pass . ,description))))))

(define (test-error description procedure input)
(call/cc
(lambda (k)
(with-exception-handler
(lambda (e) (k `(pass . ,description)))
(lambda ()
(test-run-solution procedure input)
`(fail
(description . ,description)
(input . ,input)
(output . error)
(who . ,procedure)))))))

(define (run-test-suite tests . query)
(for-each
(lambda (field)
(unless (and (symbol? field) (memq field test-fields))
(error 'run-test-suite
(format #t "~a not in ~a" field test-fields))))
query)
(let-values ([(passes failures)
(partition
(lambda (result) (eq? 'pass (car result)))
(map (lambda (test) (test)) tests))])
(cond
[(null? failures) (format #t "~%Well done!~%~%")]
[else
(format
#t
"~%Passed ~a/~a tests.~%~%The following test cases failed:~%~%"
(length passes)
(length tests))
(for-each
(lambda (failure)
(format
#t
"* ~a~%"
(cond
[(assoc 'description (cdr failure)) => cdr]
[else (cdr failure)]))
(for-each
(lambda (field)
(let ([info (assoc field (cdr failure))])
(format #t "  - ~a: ~a~%" (car info) (cdr info))))
query))
failures)
(error 'test "incorrect solution")])))

(define hello-world)

(define (test . query)
(apply
run-test-suite
(list
(lambda ()
(test-success "Say Hi!" equal? hello-world '()
"Hello, World!")))
query))

(let ([args (command-line)])
(if (null? (cdr args))
(test 'input 'output))``````
``````(import (rnrs))

(define (hello-world)
'implement-me!)

(define hello-world (display "Hello, World!"))``````