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)]
|
(assemble-numeric-constant val)]
|
||||||
[(string? val)
|
[(string? val)
|
||||||
(format "~s" val)]
|
(format "~s" val)]
|
||||||
|
[(char? val)
|
||||||
|
(format "RUNTIME.makeChar(~s)" (string val))]
|
||||||
[(bytes? val)
|
[(bytes? val)
|
||||||
(format "RUNTIME.makeBytes(~a)"
|
(format "RUNTIME.makeBytes(~a)"
|
||||||
(string-join (for/list ([a-byte val])
|
(string-join (for/list ([a-byte val])
|
||||||
|
|
|
@ -69,6 +69,8 @@
|
||||||
var checkRational = baselib.check.checkRational;
|
var checkRational = baselib.check.checkRational;
|
||||||
var checkPair = baselib.check.checkPair;
|
var checkPair = baselib.check.checkPair;
|
||||||
var checkList = baselib.check.checkList;
|
var checkList = baselib.check.checkList;
|
||||||
|
var checkListofChars = baselib.check.makeCheckListofArgumentType(baselib.chars.isChar,
|
||||||
|
'character');
|
||||||
var checkVector = baselib.check.checkVector;
|
var checkVector = baselib.check.checkVector;
|
||||||
var checkBox = baselib.check.checkBox;
|
var checkBox = baselib.check.checkBox;
|
||||||
var checkMutableBox = baselib.check.checkMutableBox;
|
var checkMutableBox = baselib.check.checkMutableBox;
|
||||||
|
@ -619,6 +621,34 @@
|
||||||
return baselib.strings.makeMutableString(arr);
|
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(
|
installPrimitiveProcedure(
|
||||||
'string-set!',
|
'string-set!',
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
var makeVector = baselib.vectors.makeVector;
|
var makeVector = baselib.vectors.makeVector;
|
||||||
var makeList = baselib.lists.makeList;
|
var makeList = baselib.lists.makeList;
|
||||||
var makePair = baselib.lists.makePair;
|
var makePair = baselib.lists.makePair;
|
||||||
|
var makeChar = baselib.chars.makeChar;
|
||||||
|
|
||||||
var makeStructureType = baselib.structs.makeStructureType;
|
var makeStructureType = baselib.structs.makeStructureType;
|
||||||
|
|
||||||
|
@ -671,6 +672,7 @@
|
||||||
// numbers
|
// numbers
|
||||||
exports['makeList'] = makeList;
|
exports['makeList'] = makeList;
|
||||||
exports['makePair'] = makePair;
|
exports['makePair'] = makePair;
|
||||||
|
exports['makeChar'] = makeChar;
|
||||||
exports['makeVector'] = makeVector;
|
exports['makeVector'] = makeVector;
|
||||||
exports['makeBox'] = makeBox;
|
exports['makeBox'] = makeBox;
|
||||||
exports['makeFloat'] = makeFloat;
|
exports['makeFloat'] = makeFloat;
|
||||||
|
|
|
@ -353,10 +353,10 @@ memq
|
||||||
;; string-ci>?
|
;; string-ci>?
|
||||||
;; string-ci<=?
|
;; string-ci<=?
|
||||||
;; string-ci>=?
|
;; string-ci>=?
|
||||||
;; substring
|
substring
|
||||||
string-append
|
string-append
|
||||||
;; string->list
|
;; string->list
|
||||||
;; list->string
|
list->string
|
||||||
;; string-copy
|
;; string-copy
|
||||||
string->symbol
|
string->symbol
|
||||||
symbol->string
|
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
|
;; content vs. a text file with the same name, but with the .rkt file
|
||||||
;; type replaced with .expected.
|
;; type replaced with .expected.
|
||||||
|
|
||||||
|
(test "more-tests/string-tests.rkt")
|
||||||
(test "more-tests/hello.rkt")
|
(test "more-tests/hello.rkt")
|
||||||
(test "more-tests/simple-functions.rkt")
|
(test "more-tests/simple-functions.rkt")
|
||||||
(test "more-tests/sk-generator.rkt")
|
(test "more-tests/sk-generator.rkt")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user