quick and dirty implementations of some string functions

This commit is contained in:
Danny Yoo 2011-08-16 18:21:06 -04:00
parent 16fced2c5b
commit 16eab25f16
7 changed files with 71 additions and 2 deletions

View File

@ -125,6 +125,8 @@
(assemble-numeric-constant val)]
[(string? val)
(format "~s" val)]
[(char? val)
(format "RUNTIME.makeChar(~s)" (string val))]
[(bytes? val)
(format "RUNTIME.makeBytes(~a)"
(string-join (for/list ([a-byte val])

View File

@ -69,6 +69,8 @@
var checkRational = baselib.check.checkRational;
var checkPair = baselib.check.checkPair;
var checkList = baselib.check.checkList;
var checkListofChars = baselib.check.makeCheckListofArgumentType(baselib.chars.isChar,
'character');
var checkVector = baselib.check.checkVector;
var checkBox = baselib.check.checkBox;
var checkMutableBox = baselib.check.checkMutableBox;
@ -619,6 +621,34 @@
return baselib.strings.makeMutableString(arr);
});
installPrimitiveProcedure(
'substring',
makeList(2, 3),
function(MACHINE) {
var str = String(checkString(MACHINE, 'substring', 0));
var start = baselib.numbers.toFixnum(checkNatural(MACHINE, 'substring', 1));
var end = str.length;
if (MACHINE.argcount === 3) {
end = baselib.numbers.toFixnum(checkNatural(MACHINE, 'substring', 2));
}
return str.substring(start, end);
});
installPrimitiveProcedure(
'list->string',
1,
function (MACHINE) {
var firstArg = checkListofChars(MACHINE, 'list->string', 0);
var result = [];
while (firstArg !== NULL) {
result.push(firstArg.first.val);
firstArg = firstArg.rest;
}
return result.join('');
});
installPrimitiveProcedure(
'string-set!',

View File

@ -54,6 +54,7 @@
var makeVector = baselib.vectors.makeVector;
var makeList = baselib.lists.makeList;
var makePair = baselib.lists.makePair;
var makeChar = baselib.chars.makeChar;
var makeStructureType = baselib.structs.makeStructureType;
@ -671,6 +672,7 @@
// numbers
exports['makeList'] = makeList;
exports['makePair'] = makePair;
exports['makeChar'] = makeChar;
exports['makeVector'] = makeVector;
exports['makeBox'] = makeBox;
exports['makeFloat'] = makeFloat;

View File

@ -353,10 +353,10 @@ memq
;; string-ci>?
;; string-ci<=?
;; string-ci>=?
;; substring
substring
string-append
;; string->list
;; list->string
list->string
;; string-copy
string->symbol
symbol->string

View File

@ -0,0 +1,15 @@
"hello world"
"ello world"
"llo world"
"lo world"
"hello world"
""
"e"
"el"
""
"l"
""
"l"
"lo"
""
"hello"

View File

@ -0,0 +1,19 @@
#lang planet dyoo/whalesong
(substring "hello world" 0)
(substring "hello world" 1)
(substring "hello world" 2)
(substring "hello world" 3)
(substring "hello world" 0)
(substring "hello world" 1 1)
(substring "hello world" 1 2)
(substring "hello world" 1 3)
(substring "hello world" 2 2)
(substring "hello world" 2 3)
(substring "hello world" 3 3)
(substring "hello world" 3 4)
(substring "hello world" 3 5)
(list->string '())
(list->string '(#\h #\e #\l #\l #\o))

View File

@ -6,6 +6,7 @@
;; content vs. a text file with the same name, but with the .rkt file
;; type replaced with .expected.
(test "more-tests/string-tests.rkt")
(test "more-tests/hello.rkt")
(test "more-tests/simple-functions.rkt")
(test "more-tests/sk-generator.rkt")