mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-22 07:09:18 +02:00
changing SRFI-1 any to return the result of the pred
was previously returning the args as in find (thanks kiyokap)
This commit is contained in:
parent
f415b01eee
commit
e738a59989
5 changed files with 35 additions and 36 deletions
|
@ -19,17 +19,17 @@
|
||||||
(lambda (p a)
|
(lambda (p a)
|
||||||
(match a
|
(match a
|
||||||
(((? (lambda (op) (eq? op cdr))) ($ Ref name (_ . (? lambda? lam))))
|
(((? (lambda (op) (eq? op cdr))) ($ Ref name (_ . (? lambda? lam))))
|
||||||
(let ((x (any (lambda (r)
|
(let ((x (find (lambda (r)
|
||||||
(and (eq? name (car r)) (eq? lam (cadr r))))
|
(and (eq? name (car r)) (eq? lam (cadr r))))
|
||||||
cdrs)))
|
cdrs)))
|
||||||
(and x (list p f (+ (caddr x) 1)))))
|
(and x (list p f (+ (caddr x) 1)))))
|
||||||
(($ Cnd
|
(($ Cnd
|
||||||
((? (lambda (op) (eq? op pair?))) ($ Ref name (_ . (? lambda? lam))))
|
((? (lambda (op) (eq? op pair?))) ($ Ref name (_ . (? lambda? lam))))
|
||||||
((? (lambda (op) (eq? op cdr))) ($ Ref name (_ . (? lambda? lam))))
|
((? (lambda (op) (eq? op cdr))) ($ Ref name (_ . (? lambda? lam))))
|
||||||
(or () ($ Lit ())))
|
(or () ($ Lit ())))
|
||||||
(let ((x (any (lambda (r)
|
(let ((x (find (lambda (r)
|
||||||
(and (eq? name (car r)) (eq? lam (cadr r))))
|
(and (eq? name (car r)) (eq? lam (cadr r))))
|
||||||
cdrs)))
|
cdrs)))
|
||||||
(and x (list p f (+ (caddr x) 1.0)))))
|
(and x (list p f (+ (caddr x) 1.0)))))
|
||||||
(else #f)))
|
(else #f)))
|
||||||
params
|
params
|
||||||
|
@ -80,8 +80,8 @@
|
||||||
(and ls (make-seq ls))))
|
(and ls (make-seq ls))))
|
||||||
(((? opcode? op) ($ Ref name (_ . (? lambda? f))))
|
(((? opcode? op) ($ Ref name (_ . (? lambda? f))))
|
||||||
(let ((r (and (memq op safe-primitives)
|
(let ((r (and (memq op safe-primitives)
|
||||||
(any (lambda (r) (and (eq? name (car r)) (eq? f (cadr r))))
|
(find (lambda (r) (and (eq? name (car r)) (eq? f (cadr r))))
|
||||||
cdrs))))
|
cdrs))))
|
||||||
(cond
|
(cond
|
||||||
((not r)
|
((not r)
|
||||||
x)
|
x)
|
||||||
|
|
29
lib/init.scm
29
lib/init.scm
|
@ -91,26 +91,25 @@
|
||||||
|
|
||||||
(define (any pred ls . lol)
|
(define (any pred ls . lol)
|
||||||
(define (any1 pred ls)
|
(define (any1 pred ls)
|
||||||
(if (pair? ls) (if (pred (car ls)) (car ls) (any1 pred (cdr ls))) #f))
|
(if (null? (cdr ls))
|
||||||
|
(pred (car ls))
|
||||||
|
((lambda (x) (if x x (any1 pred (cdr ls)))) (pred (car ls)))))
|
||||||
(define (anyn pred lol)
|
(define (anyn pred lol)
|
||||||
(if (every pair? lol)
|
(if (every pair? lol)
|
||||||
((lambda (args) (if (apply pred args) args (anyn pred (map cdr lol))))
|
((lambda (x) (if x x (anyn pred (map cdr lol))))
|
||||||
(map car lol))
|
(apply pred (map car lol)))
|
||||||
#f))
|
#f))
|
||||||
(if (null? lol) (any1 pred ls) (anyn pred (cons ls lol))))
|
(if (null? lol) (if (null? ls) #f (any1 pred ls)) (anyn pred (cons ls lol))))
|
||||||
|
|
||||||
(define (every pred ls . lol)
|
(define (every pred ls . lol)
|
||||||
(define (every1 pred ls)
|
(define (every1 pred ls)
|
||||||
(if (pair? ls) (if (pred (car ls)) (every1 pred (cdr ls)) #f) #t))
|
(if (null? (cdr ls))
|
||||||
|
(pred (car ls))
|
||||||
|
(if (pred (car ls)) (every1 pred (cdr ls)) #f)))
|
||||||
(if (null? lol)
|
(if (null? lol)
|
||||||
(every1 pred ls)
|
(if (null? ls) #t (every1 pred ls))
|
||||||
(not (apply any (lambda (x) (not (pred x))) ls lol))))
|
(not (apply any (lambda (x) (not (pred x))) ls lol))))
|
||||||
|
|
||||||
(define (delq x ls)
|
|
||||||
(if (pair? ls)
|
|
||||||
(if (eq? x (car ls)) (delq x (cdr ls)) (cons (car ls) (delq x (cdr ls))))
|
|
||||||
'()))
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; syntax
|
;; syntax
|
||||||
|
|
||||||
|
@ -408,6 +407,12 @@
|
||||||
|
|
||||||
(define assv assoc)
|
(define assv assoc)
|
||||||
|
|
||||||
|
(define (find-tail pred ls)
|
||||||
|
(and (pair? ls) (if (pred (car ls)) ls (find-tail pred (cdr ls)))))
|
||||||
|
|
||||||
|
(define (find pred ls)
|
||||||
|
(cond ((find-tail pred ls) => car) (else #f)))
|
||||||
|
|
||||||
;; math utils
|
;; math utils
|
||||||
|
|
||||||
(define (number? x) (if (fixnum? x) #t (if (bignum? x) #t (flonum? x))))
|
(define (number? x) (if (fixnum? x) #t (if (bignum? x) #t (flonum? x))))
|
||||||
|
@ -771,7 +776,7 @@
|
||||||
(cond
|
(cond
|
||||||
((identifier? t)
|
((identifier? t)
|
||||||
(cond
|
(cond
|
||||||
((any (lambda (v) (compare t (car v))) vars)
|
((find (lambda (v) (compare t (car v))) vars)
|
||||||
=> (lambda (cell)
|
=> (lambda (cell)
|
||||||
(if (<= (cdr cell) dim)
|
(if (<= (cdr cell) dim)
|
||||||
t
|
t
|
||||||
|
|
|
@ -2,12 +2,6 @@
|
||||||
;; Copyright (c) 2009-2011 Alex Shinn. All rights reserved.
|
;; Copyright (c) 2009-2011 Alex Shinn. All rights reserved.
|
||||||
;; BSD-style license: http://synthcode.com/license.txt
|
;; BSD-style license: http://synthcode.com/license.txt
|
||||||
|
|
||||||
(define (find pred ls)
|
|
||||||
(cond ((find-tail pred ls) => car) (else #f)))
|
|
||||||
|
|
||||||
(define (find-tail pred ls)
|
|
||||||
(and (pair? ls) (if (pred (car ls)) ls (find-tail pred (cdr ls)))))
|
|
||||||
|
|
||||||
(define (take-while pred ls)
|
(define (take-while pred ls)
|
||||||
(let lp ((ls ls) (res '()))
|
(let lp ((ls ls) (res '()))
|
||||||
(if (and (pair? ls) (pred (car ls)))
|
(if (and (pair? ls) (pred (car ls)))
|
||||||
|
|
|
@ -406,7 +406,7 @@ div#footer {padding-bottom: 50px}
|
||||||
(define (section>=? x n)
|
(define (section>=? x n)
|
||||||
(and (pair? x)
|
(and (pair? x)
|
||||||
(if (memq (car x) '(div))
|
(if (memq (car x) '(div))
|
||||||
(any (lambda (y) (section>=? y n)) (sxml-body x))
|
(find (lambda (y) (section>=? y n)) (sxml-body x))
|
||||||
(>= (section-number (car x)) n))))
|
(>= (section-number (car x)) n))))
|
||||||
|
|
||||||
(define (extract-sxml tag x)
|
(define (extract-sxml tag x)
|
||||||
|
|
|
@ -744,11 +744,11 @@
|
||||||
((and (not (type-default? arg)) (type-value arg))
|
((and (not (type-default? arg)) (type-value arg))
|
||||||
=> (lambda (x)
|
=> (lambda (x)
|
||||||
(cond
|
(cond
|
||||||
((any (lambda (y)
|
((find (lambda (y)
|
||||||
(and (type-array y)
|
(and (type-array y)
|
||||||
(type-auto-expand? y)
|
(type-auto-expand? y)
|
||||||
(eq? x (get-array-length func y))))
|
(eq? x (get-array-length func y))))
|
||||||
(func-c-args func))
|
(func-c-args func))
|
||||||
=> (lambda (y) (cat "len" (type-index y))))
|
=> (lambda (y) (cat "len" (type-index y))))
|
||||||
(else (write x)))))
|
(else (write x)))))
|
||||||
((or (type-result? arg) (type-array arg))
|
((or (type-result? arg) (type-array arg))
|
||||||
|
@ -785,7 +785,7 @@
|
||||||
c-args)
|
c-args)
|
||||||
(cat ")"))
|
(cat ")"))
|
||||||
(cond
|
(cond
|
||||||
((any type-link? (func-c-args func))
|
((find type-link? (func-c-args func))
|
||||||
=> (lambda (a) (string-append "arg" (type-index-string a))))
|
=> (lambda (a) (string-append "arg" (type-index-string a))))
|
||||||
(else #f)))
|
(else #f)))
|
||||||
(cat ";\n")
|
(cat ";\n")
|
||||||
|
@ -842,7 +842,7 @@
|
||||||
"")
|
"")
|
||||||
"err) {\n"
|
"err) {\n"
|
||||||
(cond
|
(cond
|
||||||
((any type-auto-expand? (func-c-args func))
|
((find type-auto-expand? (func-c-args func))
|
||||||
=> (lambda (a)
|
=> (lambda (a)
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(let ((len (get-array-length func a))
|
(let ((len (get-array-length func a))
|
||||||
|
@ -1100,8 +1100,8 @@
|
||||||
((pair? ls)
|
((pair? ls)
|
||||||
(let* ((a (car ls))
|
(let* ((a (car ls))
|
||||||
(field
|
(field
|
||||||
(any (lambda (f) (and (pair? f) (eq? a (cadr f))))
|
(find (lambda (f) (and (pair? f) (eq? a (cadr f))))
|
||||||
(cddr x))))
|
(cddr x))))
|
||||||
(if field
|
(if field
|
||||||
(cat " r->" (cadr field) " = "
|
(cat " r->" (cadr field) " = "
|
||||||
(lambda ()
|
(lambda ()
|
||||||
|
|
Loading…
Add table
Reference in a new issue