[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Chicken-users] complex library package issue
From: |
Terrence Brannon |
Subject: |
[Chicken-users] complex library package issue |
Date: |
Sat, 1 Sep 2007 17:49:03 -0400 |
Hello, the complex package is turning the addition of two lists which
start with zero into a complex result when it should just be another
list. Case synopsis:
(Plus '(0 1 2 3) '(0 1 2 3)) ;; yields a complex!
(Plus '(1 2 3) '(1 2 3)) ;; yields a list, as expected
(Plus 3 '(1 2 3)) ;; yields a list, as expected
(Plus 3 4) ;; yields a scalar, as expected
The code which follows will exemplify this behavior, as long as you
get all the eggs that it requires:
chicken-setup array-lib complex
(require-extension array-lib)
(require-extension array-lib-hof)
(require-extension complex)
(use srfi-1)
; http://srfi.schemers.org/srfi-63/srfi-63.html
(define (strict-array? obj)
(and (array? obj) (not (string? obj)) (not (vector? obj))))
(define (map-wrap proc . lists)
(cond
((any strict-array? lists)
(let* ([newlists (apply array-agree lists)])
(apply array-map '#() proc newlists)))
((any (lambda (x) (and list? (not (complex? x)))) lists)
(apply map
proc
(map (lambda (x)
(if (not (pair? x))
(circular-list x)
x))
lists)))
(else (apply proc lists))))
(define (Shape dim-list . data)
(let* ([dimension-list (if (list? dim-list) dim-list (list dim-list))]
[prototype '#()]
[dimensions (apply make-array-dimensions dimension-list)]
[cardinality (apply * dimension-list)]
[data-size (lambda () (length data))]
[list-logic (lambda (L)
(cond
((= (data-size) cardinality) data)
((> (data-size) cardinality) (take data cardinality))
((< (data-size) cardinality)
(take (apply circular-list data) cardinality))))]
[data* (if (list? data)
(list-logic data)
(make-list cardinality data))]
[vektor (list->vector data*)])
(apply vector->array vektor prototype dimension-list)))
(define (Plus m n) (map-wrap + m n))
(Plus '(0 1 2 3) '(0 1 2 3)) ;; yields a complex!
(Plus '(1 2 3) '(1 2 3)) ;; yields a list, as expected
(Plus 3 '(1 2 3)) ;; yields a list, as expected
(Plus 3 4) ;; yields a scalar, as expected
- [Chicken-users] complex library package issue,
Terrence Brannon <=