core: Remove substring.
* string.c (substring): Remove. * module/mes/scm.mes (substring): New function.
This commit is contained in:
parent
9e6d862c5b
commit
d37232f39c
|
@ -194,6 +194,12 @@
|
||||||
(define (string-ref s k)
|
(define (string-ref s k)
|
||||||
(list-ref (string->list s) k))
|
(list-ref (string->list s) k))
|
||||||
|
|
||||||
|
(define (substring s start . rest)
|
||||||
|
(let* ((end (and (pair? rest) (car rest)))
|
||||||
|
(lst (list-tail (string->list s) start)))
|
||||||
|
(list->string (if (not end) lst
|
||||||
|
(list-head lst (- end start))))))
|
||||||
|
|
||||||
(define (string-prefix? prefix string)
|
(define (string-prefix? prefix string)
|
||||||
(and
|
(and
|
||||||
(>= (string-length string) (string-length prefix))
|
(>= (string-length string) (string-length prefix))
|
||||||
|
|
24
string.c
24
string.c
|
@ -18,30 +18,6 @@
|
||||||
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SCM
|
|
||||||
substring (SCM x) ///((arity . n))
|
|
||||||
{
|
|
||||||
assert (TYPE (x) == PAIR);
|
|
||||||
assert (TYPE (car (x)) == STRING);
|
|
||||||
SCM s = STRING (car (x));
|
|
||||||
assert (TYPE (cadr (x)) == NUMBER);
|
|
||||||
int start = VALUE (cadr (x));
|
|
||||||
int end = VALUE (length (s));
|
|
||||||
if (TYPE (cddr (x)) == PAIR) {
|
|
||||||
assert (TYPE (caddr (x)) == NUMBER);
|
|
||||||
assert (VALUE (caddr (x)) <= end);
|
|
||||||
end = VALUE (caddr (x));
|
|
||||||
}
|
|
||||||
int n = end - start;
|
|
||||||
while (start--) s = cdr (s);
|
|
||||||
SCM p = cell_nil;
|
|
||||||
while (n-- && s != cell_nil) {
|
|
||||||
p = append2 (p, cons (MAKE_CHAR (VALUE (car (s))), cell_nil));
|
|
||||||
s = cdr (s);
|
|
||||||
}
|
|
||||||
return MAKE_STRING (p);
|
|
||||||
}
|
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
number_to_string (SCM x)
|
number_to_string (SCM x)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue