diff options
| -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) |
