quick and dirty implementations of some string functions
This commit is contained in:
parent
16fced2c5b
commit
16eab25f16
|
@ -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])
|
||||
|
|
|
@ -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!',
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
15
tests/more-tests/string-tests.expected
Normal file
15
tests/more-tests/string-tests.expected
Normal file
|
@ -0,0 +1,15 @@
|
|||
"hello world"
|
||||
"ello world"
|
||||
"llo world"
|
||||
"lo world"
|
||||
"hello world"
|
||||
""
|
||||
"e"
|
||||
"el"
|
||||
""
|
||||
"l"
|
||||
""
|
||||
"l"
|
||||
"lo"
|
||||
""
|
||||
"hello"
|
19
tests/more-tests/string-tests.rkt
Normal file
19
tests/more-tests/string-tests.rkt
Normal 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))
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue
Block a user