aboutsummaryrefslogtreecommitdiff
path: root/challenge-003
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-003')
-rw-r--r--challenge-003/abigail/README.md1
-rw-r--r--challenge-003/abigail/scheme/ch-2.scm50
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)