1 (define-module (language python module python
)
2 #:use-module
(oop goops
)
3 #:use-module
(ice-9 match
)
4 #:use-module
(ice-9 readline
)
5 #:use-module
((oop pf-objects
) #:select
6 (<p
> <property
> class-method static-method refq
8 #:use-module
(language python exceptions
)
9 #:use-module
(language python def
)
10 #:use-module
(language python for
)
11 #:use-module
(language python try
)
12 #:use-module
(language python yield
)
13 #:use-module
(language python list
)
14 #:use-module
(language python dict
)
15 #:use-module
(language python set
)
16 #:use-module
(language python compile
)
17 #:use-module
(language python string
)
18 #:use-module
(language python bytes
)
19 #:use-module
(language python set
)
20 #:use-module
(language python number
)
21 #:use-module
(language python dir
)
22 #:use-module
(language python hash
)
23 #:use-module
(language python property
)
24 #:use-module
(language python range
)
25 #:use-module
(language python tuple
)
27 #:replace
(list abs min max hash round
)
29 #:re-export
(StopIteration GeneratorExit RuntimeError
30 Exception ValueError TypeError
31 IndexError KeyError AttributeError
32 send sendException next
33 GeneratorExit sendClose RuntimeError
34 len dir next dict None property range
38 #:export
(print repr complex float int
39 set all any bin callable reversed
40 chr classmethod staticmethod
41 divmod enumerate filter format
42 getattr hasattr hex isinstance
43 iter map sum id input oct ord pow super
46 (define-syntax-rule (aif it p x y
) (let ((it p
)) (if it x y
)))
51 ((x) (format #t
"~s~%" x
))
52 (l (format #t
"~s~%" l
))))
54 (define (repr x
) (format #f
"~a" x
))
56 (define string pystring
)
57 (define complex py-complex
)
58 (define float py-float
)
60 (define round py-round
)
65 (define divmod py-divmod
)
66 (define format py-format
)
70 (define-method (callable x
) #f
)
71 (define-method (callable (x <procedure
> )) #t
)
72 (define-method (callable (x <procedure-class
> )) #t
)
73 (define-method (callable (x <applicable
> )) #t
)
74 (define-method (callable (x <primitive-generic
>)) #t
)
75 (define-method (callable (x <p
>))
78 (define chr integer-
>char
)
80 (define classmethod class-method
)
81 (define staticmethod static-method
)
84 (make-generator enumerate
86 (for ((x : l
)) ((i 0))
91 (make-generator enumerate
97 (define miss
((@ (guile) list
) 'miss
))
99 (define* (getattr a b
#:optional
(k miss
))
100 (let ((r (refq a
(symbol->string b
) k
)))
102 (raise AttributeError
"object/class ~a is missing attribute ~a" a b
)
105 (define (hasattr a b
)
106 (let ((r (refq a
(symbol->string b
) miss
)))
109 (define (isinstance o cl
)
112 (isinstance o
(car cl
))
113 (isinstance o
(cdr cl
)))
118 ((o) (aif it
(wrap-in o
)
120 (aif get
(refq o
'__getitem__
)
126 (raise TypeError
"not iterable" o
))))
142 (with-syntax (((x ...
) (generate-temporaries #'(a ...
))))
143 #'(make-generator map
145 (for ((x : a
) ...
) () (yield (f x ...
))))))))))
147 (define* (sum i
#:optional
(start 0))
148 (for ((x : i
)) ((s start
))
154 (define (id x
) (object-address x
))
162 (def (py-min (* l
) (= key idx
) (= default miss
))
166 (for ((x : it
)) ((s default
) (b default
))
175 (raise ValueError
"min does not work for zero length list")
177 (_ (lp ((@ (guile) list
) l
))))))
179 (def (py-max (* l
) (= key idx
) (= default miss
))
183 (for ((x : it
)) ((s default
) (b default
))
184 (if (eq? default miss
)
192 (raise ValueError
"min does not work for zero length list")
194 (_ (lp ((@ (guile) list
) l
))))))
196 (define (oct x
) (+ "0o" (number->string
(py-index x
) 8)))
197 (define (ord x
) (char->integer
(string-ref (pylist-ref x
0) 0)))
204 (py-mod (expt x y
) z
))))
206 (define-syntax-rule (super . l
) (py-super-mac . l
))
211 (define reversed py-reversed
)
212 (define (key-id x
) x
)
213 (define* (sorted it
#:key
(key key-id
) (reverse #f
))
214 (define l
(to-pylist '()))
215 (for ((x : it
)) () (pylist-append! l x
))
216 (pylist-sort! l
#:key key
#:reverse reverse
)
220 (let ((l ((@ (guile) map
) wrap-in l
)))
224 (let lp2
((l l
) (r '()))
226 (call-with-values (lambda () (next (car l
)))
228 (lp2 (cdr l
) (append (reverse z
) r
))))