~ chicken-core (chicken-5) ac9bf937f7a3bf39a1b4044f8d4328756d9b4a52


commit ac9bf937f7a3bf39a1b4044f8d4328756d9b4a52
Author:     felix <bunny351@gmail.com>
AuthorDate: Mon Apr 26 12:23:46 2010 +0200
Commit:     felix <bunny351@gmail.com>
CommitDate: Mon Apr 26 12:23:46 2010 +0200

    added symbol-append

diff --git a/library.scm b/library.scm
index 47e77c05..dabacde0 100644
--- a/library.scm
+++ b/library.scm
@@ -1210,6 +1210,16 @@ EOF
 		    (err prefix) ) ) )
 	  (##sys#number->string counter) ) ) ) ) ) )
 
+(define symbol-append
+  (let ((string-append string-append))
+    (lambda ss
+      (##sys#intern-symbol
+       (apply
+	string-append 
+	(map (lambda (s)
+	       (##sys#check-symbol s 'symbol-append)
+	       (##sys#symbol->string s))
+	     ss))))))
 
 ;;; Keywords:
 
diff --git a/manual/Unit library b/manual/Unit library
index ef0f01d3..08458f9d 100644
--- a/manual/Unit library	
+++ b/manual/Unit library	
@@ -926,6 +926,13 @@ the new symbol is prefixed with that argument.
 Returns a newly created, unique symbol with the name {{STRING}}.
 
 
+==== symbol-append
+
+<procedure>(symbol-append SYMBOL1 ...)</procedure>
+
+Creates a new interned symbol from the concatenated names of the argument symbols
+{{(SYMBOL1 ...)}}.
+
 
 === Standard Input/Output
 
diff --git a/types.db b/types.db
index 5021ee45..204a941b 100644
--- a/types.db
+++ b/types.db
@@ -80,6 +80,7 @@
 (assv (procedure assv (* list) *))
 (assoc (procedure assoc (* list #!optional (procedure (* *) *)) *))
 (symbol? (procedure symbol? (*) boolean))
+(symbol-append (procedure symbol-append (#!rest symbol) symbol))
 (symbol->string (procedure symbol->string (symbol) string))
 (string->symbol (procedure string->symbol (string) symbol))
 (number? (procedure number? (*) boolean))
Trap