diff options
| author | Abigail <abigail@abigail.freedom.nl> | 2022-01-06 21:02:24 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.freedom.nl> | 2022-01-06 21:02:24 +0100 |
| commit | 2283fa58f497b5376d4750fd886ddf70e281fe1a (patch) | |
| tree | 64886e23906696cb81fbd0dbd9d6785708b2f14d | |
| parent | 8d0f6e0eb5075b8f0fc726a16b712b9d262df073 (diff) | |
| download | perlweeklychallenge-club-2283fa58f497b5376d4750fd886ddf70e281fe1a.tar.gz perlweeklychallenge-club-2283fa58f497b5376d4750fd886ddf70e281fe1a.tar.bz2 perlweeklychallenge-club-2283fa58f497b5376d4750fd886ddf70e281fe1a.zip | |
Week 3, part 2: Scheme solution
| -rw-r--r-- | challenge-003/abigail/README.md | 1 | ||||
| -rw-r--r-- | challenge-003/abigail/scheme/ch-2.scm | 50 |
2 files changed, 51 insertions, 0 deletions
diff --git a/challenge-003/abigail/README.md b/challenge-003/abigail/README.md index 6adf435e09..0438781a9f 100644 --- a/challenge-003/abigail/README.md +++ b/challenge-003/abigail/README.md @@ -32,4 +32,5 @@ * [Python](python/ch-2.py) * [R](r/ch-2.r) * [Ruby](ruby/ch-2.rb) +* [Scheme](scheme/ch-2.scm) * [Tcl](tcl/ch-2.tcl) diff --git a/challenge-003/abigail/scheme/ch-2.scm b/challenge-003/abigail/scheme/ch-2.scm new file mode 100644 index 0000000000..cb57dd539b --- /dev/null +++ b/challenge-003/abigail/scheme/ch-2.scm @@ -0,0 +1,50 @@ +#!/usr/local/bin/guile +!# + +;;; +;;; See https://theweeklychallenge.org/blog/perl-weekly-challenge-003 +;;; + +;;; +;;; Run as: guile --no-auto-compile ch-2.scm +;;; + + +(use-modules (ice-9 rdelim)) + +(define (merge list1 list2) + (if (> (length list1) 0) + (append (list (+ (car list1) (car list2))) + (merge (cdr list1) (cdr list2))) + '())) + +(define (nextrow row) + (merge (append (list 0) row) (append row (list 0)))) + +(define (show row) + (cond ((= (length row) 0) (newline)) + (else (display (car row)) + (display " ") + (show (cdr row))))) + +(define (_pascal rows row) + (if (>= rows 0) + (begin + (show row) + (_pascal (- rows 1) (nextrow row))))) + +(define (pascal rows) + (_pascal rows (list 1)) +) + +(define (main) + (define max (read-line)) + (if (not (eof-object? max)) + (begin + (pascal (string->number max)) + (main) + ) + ) +) + +(main) |
