mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-06 12:10:28 +02:00
* session.scm (arity): New procedure.
This commit is contained in:
parent
aa3bdf59ac
commit
4a9f464eff
1 changed files with 39 additions and 0 deletions
|
@ -123,3 +123,42 @@
|
|||
(cond ((procedure? obj) (procedure-source obj))
|
||||
((macro? obj) (procedure-source (macro-transformer obj)))
|
||||
(else #f)))
|
||||
|
||||
(define-public (arity obj)
|
||||
(let ((arity (procedure-property obj 'arity)))
|
||||
(display (car arity))
|
||||
(cond ((caddr arity)
|
||||
(display " or more"))
|
||||
((not (zero? (cadr arity)))
|
||||
(display " required and ")
|
||||
(display (cadr arity))
|
||||
(display " optional")))
|
||||
(if (and (not (caddr arity))
|
||||
(= (car arity) 1)
|
||||
(<= (cadr arity) 1))
|
||||
(display " argument")
|
||||
(display " arguments"))
|
||||
(if (closure? obj)
|
||||
(let ((formals (cadr (procedure-source obj))))
|
||||
(if (pair? formals)
|
||||
(begin
|
||||
(display ": `")
|
||||
(display (car formals))
|
||||
(let loop ((ls (cdr formals)))
|
||||
(cond ((null? ls)
|
||||
(display #\'))
|
||||
((not (pair? ls))
|
||||
(display "', the rest in `")
|
||||
(display ls)
|
||||
(display #\'))
|
||||
(else
|
||||
(if (pair? (cdr ls))
|
||||
(display "', `")
|
||||
(display "' and `"))
|
||||
(display (car ls))
|
||||
(loop (cdr ls))))))
|
||||
(begin
|
||||
(display " in `")
|
||||
(display formals)
|
||||
(display #\')))))
|
||||
(display ".\n")))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue