scm: Add compose.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Mar 2017 22:35:36 +0000 (00:35 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Mar 2017 22:35:36 +0000 (00:35 +0200)
* module/mes/scm.mes (compose): New function.
* tests/scm.test ("compose"): New test.

module/mes/scm.mes
tests/scm.test

index 56906640af5502934b5561148552501ad6c6de71..e04e982c03e2476d72f64f2ca69f9b6b0524ccf2 100644 (file)
 (define (delq x lst)
   (filter (lambda (e) (not (eq? e x))) lst))
 
+(define (compose proc . rest)
+  (if (null? rest) proc
+      (lambda args
+        (proc (apply (apply compose rest) args)))))
+
 \f
 ;; Vector
 (define (vector . rest) (list->vector rest))
index 2f444255cb8baa2d25e80538c159b4bdd8345729..904c4b1005f8f93587c8af5b7e2924c819c88826 100755 (executable)
@@ -9,7 +9,7 @@ exit $?
 ;;; -*-scheme-*-
 
 ;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of Mes.
 ;;;
@@ -136,4 +136,6 @@ exit $?
 (pass-if "char-alphabetic?" (seq? (char-alphabetic? #\a) #t))
 (pass-if "char-alphabetic? 2" (seq? (char-alphabetic? #\[) #f))
 
+(pass-if-equal "compose" 1 ((compose car cdr car) '((0 1 2))))
+
 (result 'report)