Skip to content

Commit f97fb54

Browse files
committed
Implement SRFI 101. Provide libraries (srfi 101) and (scheme rlist) as well as corresponding regression test suite.
1 parent 7497a57 commit f97fb54

File tree

5 files changed

+751
-2
lines changed

5 files changed

+751
-2
lines changed

LispKit.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@
8787
CC502A951CDABF1E00875D9F /* BuildMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = CC502A941CDABF1E00875D9F /* BuildMetadata.m */; };
8888
CC5033AF1CDB9A440045A8FA /* AppInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5033AE1CDB9A440045A8FA /* AppInfo.swift */; };
8989
CC5033B11CDBE4CD0045A8FA /* Console.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5033B01CDBE4CD0045A8FA /* Console.swift */; };
90+
CC54923921D97FB7004A0652 /* 101.sld in Copy pre-installed SRFI libraries */ = {isa = PBXBuildFile; fileRef = CC54923821D97F53004A0652 /* 101.sld */; };
91+
CC54923B21D9828B004A0652 /* SRFI-101-Tests.scm in Copy tests */ = {isa = PBXBuildFile; fileRef = CC54923A21D9823B004A0652 /* SRFI-101-Tests.scm */; };
92+
CC54923D21D98F81004A0652 /* rlist.sld in Copy pre-installed Scheme libraries */ = {isa = PBXBuildFile; fileRef = CC54923C21D98E3E004A0652 /* rlist.sld */; };
9093
CC55A8291C50D35C00772B02 /* Procedure.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC55A8281C50D35C00772B02 /* Procedure.swift */; };
9194
CC55A82B1C5175B000772B02 /* SpecialForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC55A82A1C5175B000772B02 /* SpecialForm.swift */; };
9295
CC5696771CBCFA9900F6803E /* Instruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5696761CBCFA9900F6803E /* Instruction.swift */; };
@@ -275,6 +278,7 @@
275278
dstPath = LispKit/Resources/Tests;
276279
dstSubfolderSpec = 7;
277280
files = (
281+
CC54923B21D9828B004A0652 /* SRFI-101-Tests.scm in Copy tests */,
278282
CC2C73DF21A22D2B00B18661 /* SRFI-125-Tests.scm in Copy tests */,
279283
CC09ECF42198B8C100F84713 /* R7RS-Tests.scm in Copy tests */,
280284
);
@@ -415,6 +419,7 @@
415419
dstPath = LispKit/Resources/Libraries/scheme;
416420
dstSubfolderSpec = 7;
417421
files = (
422+
CC54923D21D98F81004A0652 /* rlist.sld in Copy pre-installed Scheme libraries */,
418423
CC2C73E121A22F0D00B18661 /* hash-table.sld in Copy pre-installed Scheme libraries */,
419424
CC2C73D221A1E9DC00B18661 /* vector.sld in Copy pre-installed Scheme libraries */,
420425
CC2C73D321A1E9DC00B18661 /* sort.sld in Copy pre-installed Scheme libraries */,
@@ -487,6 +492,7 @@
487492
dstPath = LispKit/Resources/Libraries/srfi;
488493
dstSubfolderSpec = 7;
489494
files = (
495+
CC54923921D97FB7004A0652 /* 101.sld in Copy pre-installed SRFI libraries */,
490496
CC2C73DD21A2190D00B18661 /* 125.sld in Copy pre-installed SRFI libraries */,
491497
CC703A21218D123F00E71EA9 /* 95.sld in Copy pre-installed SRFI libraries */,
492498
CC703A19218BC8E400E71EA9 /* 39.sld in Copy pre-installed SRFI libraries */,
@@ -616,6 +622,9 @@
616622
CC502A961CDABF6B00875D9F /* BuildMetadata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BuildMetadata.h; sourceTree = "<group>"; };
617623
CC5033AE1CDB9A440045A8FA /* AppInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppInfo.swift; sourceTree = "<group>"; };
618624
CC5033B01CDBE4CD0045A8FA /* Console.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Console.swift; sourceTree = "<group>"; };
625+
CC54923821D97F53004A0652 /* 101.sld */ = {isa = PBXFileReference; lastKnownFileType = text; path = 101.sld; sourceTree = "<group>"; };
626+
CC54923A21D9823B004A0652 /* SRFI-101-Tests.scm */ = {isa = PBXFileReference; lastKnownFileType = text; path = "SRFI-101-Tests.scm"; sourceTree = "<group>"; };
627+
CC54923C21D98E3E004A0652 /* rlist.sld */ = {isa = PBXFileReference; lastKnownFileType = text; path = rlist.sld; sourceTree = "<group>"; };
619628
CC55A8281C50D35C00772B02 /* Procedure.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Procedure.swift; sourceTree = "<group>"; };
620629
CC55A82A1C5175B000772B02 /* SpecialForm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpecialForm.swift; sourceTree = "<group>"; };
621630
CC5696761CBCFA9900F6803E /* Instruction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Instruction.swift; sourceTree = "<group>"; };
@@ -828,6 +837,7 @@
828837
isa = PBXGroup;
829838
children = (
830839
CC09ECF22198B87200F84713 /* R7RS-Tests.scm */,
840+
CC54923A21D9823B004A0652 /* SRFI-101-Tests.scm */,
831841
CC2C73DE21A22CFD00B18661 /* SRFI-125-Tests.scm */,
832842
);
833843
path = Tests;
@@ -895,6 +905,7 @@
895905
CC2C73E021A22DDD00B18661 /* hash-table.sld */,
896906
CC2C73C6219E295200B18661 /* ideque.sld */,
897907
CC2C73C7219E2F2D00B18661 /* list.sld */,
908+
CC54923C21D98E3E004A0652 /* rlist.sld */,
898909
CC2C73CE21A1E4E700B18661 /* set.sld */,
899910
CC2C73CD21A1E32E00B18661 /* sort.sld */,
900911
CC2C73D021A1E70600B18661 /* stream.sld */,
@@ -990,6 +1001,7 @@
9901001
CC2C73D821A1F3E800B18661 /* 69 */,
9911002
CC5E473C20D2D8B600F21B03 /* 69.sld */,
9921003
CC703A20218D122100E71EA9 /* 95.sld */,
1004+
CC54923821D97F53004A0652 /* 101.sld */,
9931005
CC26263B20F56DBF00AC08E8 /* 111.sld */,
9941006
CC26263D20F56F9300AC08E8 /* 112.sld */,
9951007
CC26263F20F7FB8100AC08E8 /* 113.sld */,

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@ _LispKit_ provides support for the following core features, many of which are ba
5050
- All R7RS (small) libraries: `(scheme base)`, `(scheme case-lambda)`, `(scheme char)`, `(scheme complex)`,
5151
`(scheme cxr)`, `(scheme eval)`, `(scheme file)`, `(scheme inexact)`, `(scheme lazy)`,
5252
`(scheme load)`, `(scheme process-context)`, `(scheme read)`, `(scheme repl)`, `(scheme time)`
53-
- Some R7RS (large) libraries from `(scheme red)`:
54-
`(scheme comparator)`, `(scheme generator)`, `(scheme ideque)`, `(scheme list)`
53+
- Some R7RS (large) libraries from Scheme Red edition:
54+
`(scheme box)`, `(scheme comparator)`, `(scheme generator)`, `(scheme hash-table)`,
55+
`(scheme ideque)`, `(scheme list)`, `(scheme rlist)`, `(scheme set)`, `(scheme sort)`,
56+
`(scheme stream)`, `(scheme text)`, `(scheme vector)`
5557
- LispKit-specific libraries: [`(lispkit box)`](https://github.com/objecthub/swift-lispkit/wiki/LispKit-Box),
5658
[`(lispkit type)`](https://github.com/objecthub/swift-lispkit/wiki/LispKit-Type),
5759
[`(lispkit hashtable)`](https://github.com/objecthub/swift-lispkit/wiki/LispKit-Hashtable),
60+
`(lispkit log)`,
5861
`(lispkit test)`,
5962
[`(lispkit datatype)`](https://github.com/objecthub/swift-lispkit/wiki/LispKit-Datatype),
6063
[`(lispkit object)`](https://github.com/objecthub/swift-lispkit/wiki/LispKit-Object),
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
;;; SCHEME RLIST
2+
;;;
3+
;;; Scheme random-access list library. This library is part of the Scheme Red edition of
4+
;;; the R7RS large language.
5+
;;;
6+
;;; Author: Matthias Zenger
7+
;;; Copyright © 2019 Matthias Zenger. All rights reserved.
8+
;;;
9+
;;; Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
10+
;;; except in compliance with the License. You may obtain a copy of the License at
11+
;;;
12+
;;; http://www.apache.org/licenses/LICENSE-2.0
13+
;;;
14+
;;; Unless required by applicable law or agreed to in writing, software distributed under the
15+
;;; License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
16+
;;; either express or implied. See the License for the specific language governing permissions
17+
;;; and limitations under the License.
18+
19+
(define-library (scheme rlist)
20+
21+
(export (rename quote rquote)
22+
(rename pair? rpair?)
23+
(rename cons rcons)
24+
(rename car rcar)
25+
(rename cdr rcdr)
26+
(rename caar rcaar)
27+
(rename cadr rcadr)
28+
(rename cddr rcddr)
29+
(rename cdar rcdar)
30+
(rename caaar rcaaar)
31+
(rename caadr rcaadr)
32+
(rename caddr rcaddr)
33+
(rename cadar rcadar)
34+
(rename cdaar rcdaar)
35+
(rename cdadr rcdadr)
36+
(rename cdddr rcdddr)
37+
(rename cddar rcddar)
38+
(rename caaaar rcaaaar)
39+
(rename caaadr rcaaadr)
40+
(rename caaddr rcaaddr)
41+
(rename caadar rcaadar)
42+
(rename cadaar rcadaar)
43+
(rename cadadr rcadadr)
44+
(rename cadddr rcadddr)
45+
(rename caddar rcaddar)
46+
(rename cdaaar rcdaaar)
47+
(rename cdaadr rcdaadr)
48+
(rename cdaddr rcdaddr)
49+
(rename cdadar rcdadar)
50+
(rename cddaar rcddaar)
51+
(rename cddadr rcddadr)
52+
(rename cddddr rcddddr)
53+
(rename cdddar rcdddar)
54+
(rename null? rnull?)
55+
(rename list? rlist?)
56+
(rename list rlist)
57+
(rename make-list make-rlist)
58+
(rename length rlength)
59+
(rename append rappend)
60+
(rename reverse rreverse)
61+
(rename list-tail rlist-tail)
62+
(rename list-ref rlist-ref)
63+
(rename list-set rlist-set)
64+
(rename list-ref/update rlist-ref/update)
65+
(rename map rmap)
66+
(rename for-each rfor-each)
67+
(rename random-access-list->linear-access-list rlist->list)
68+
(rename linear-access-list->random-access-list list->rlist))
69+
70+
(import (srfi 101))
71+
)

0 commit comments

Comments
 (0)