-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtao-c.lisp
2104 lines (1807 loc) · 61.9 KB
/
tao-c.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
(tao:common-lisp)
(in-package #:tao-internal)
(define
"caaaar"
#'cl:caaaar
:documentation
"形式 : caaaar list
(caaaar list) = (car (car (car (car list))))。"
:example
"(caaaar '((((a))))) -> a
(caaaar '(((((a b)))))) -> (a b)
(caaaar '((((nil))))) -> nil
(caaaar '((((()))))) -> ()")
(define
"caaadr"
#'cl:caaadr
:documentation
"形式 : caaadr list
(caaadr list) = (car (car (car (cdr list))))。"
:example
"(caaadr '(a ((b (c (d (e))))))) -> b")
(define
"caaar"
#'cl:caaar
:documentation
"形式 : caaar list
(caaar list) = (car (car (car list)))。"
:example
"(caaar '(((b)))) -> b")
(define
"caadar"
#'cl:caadar
:documentation
"形式 : caadar list
(caadar list) = (car (car (cdr (car list))))"
:example
"(caadar '((a b c d e))) -> c")
(define
"caaddr"
#'cl:caaddr
:documentation
"形式 : caaddr list
(caaddr list) = (car (car (cdr (cdr list))))"
:example
"(caaddr '((a) (b) (c) (d) (e))) -> c")
(define
"caadr"
#'cl:caadr
:documentation
"形式 : caadr list
(caadr list) = (car (car (cdr list)))"
:example
"(caadr '((a) (b) (c) (d) (e))) -> (c)")
(define
"caar"
#'caar
:documentation
"形式 : caar list
(caar list) = (car (car list))。"
:example
"(caar '(((a b)))) -> (a b)")
(define
"cadaar"
#'cl:cadaar
:documentation
"形式 : cadaar list
(cadaar list) = (car (cdr (car (car list))))。"
:example
"(cadaar '((((a) (b) (c))))) -> (b)")
(define
"cadadr"
#'cl:cadadr
:documentation
"形式 : cadadr list
(cadadr list) = (car (cdr (car (cdr list))))。"
:example
"(cadadr '((a) ((b) c) (d) (e) (f))) -> (c)")
(define
"cadar"
#'cl:cadar
:documentation
"形式 : cadar list
(cadar list) = (car (cdr (car list)))。"
:example
"(cadar '((a (b) (c)))) -> (b)")
(define
"cadblep"
(subr (object)
(and (typep object 'list)
object))
:documentation
"形式 : cadblep object
object が car 関数でも cdr 関数でもエラーにならないならば、評価値を返し、
それ以外なら nil を返す。"
:example
"(cadblep '(a b c)) -> (a b c)
(cadblep \"ultra-q\") -> nil
(cadblep 'seven) -> nil
(cadblep nil) -> nil")
(define
"caddar"
#'cl:caddar
:documentation
"形式 : caddar list
(caddar list) = (car (cdr (cdr (car list))))。"
:example
"(caddar '(a (b) (c))) -> (c)")
(define
"cadddr"
#'cl:cadddr
:documentation
"形式 : cadddr list
(cadddr list) = (car (cdr (cdr (cdr list))))。"
:example
"(cadddr '(a b c (d e))) -> (d e)")
(define
"caddr"
#'caddr
:documentation
"形式 : caddr list
(caddr list) = (car (cdr (cdr list)))。"
:example
"(caddr '(a b c)) -> c")
(define
"cadr"
#'cadr
:documentation
"形式 : cadr list
(cadr list) = (car (cdr list))。"
:example
"(cadr '(a (b))) -> (b)")
(define
"call-arguments-limit"
(constant call-arguments-limit)
:documentation
"関数に渡し得る引数の上限を示す正の整数で、128。"
:example
"")
(define
"car"
#'car
:documentation
"形式 : car list
list の第 1 要素 (car 部) を返す。list は cadble (carおよび cdr をとる
ことができる) でなければならない。nil に適用することはできない。
予め、フォーム (set-sysmode :car-nil-error nil) を実行しておけばエラー
を返さないで nil を返す。
関数 cdr、car と cdr の合成関数 (car や cdr 関数処理を 4 回まで続け
て行う場合には、そのすべての組み合わせについて個々に関数が定義されて
おり、その名前は c で始まり r で終わる。 c と r の間は car
オペレーションに対して a、cdrオペレーションに対して d を指定する)。"
:example
"(car '(a b c)) -> a
(car nil) エラーが警告される")
(define
"case"
(cl-macro case)
:documentation
"形式 : case key-form (key-list1 form11 form12 ...)
(key-list2 form21 form22 ...)
...
(key-listM formM1 formM2 ... formMN)
key-list1 key-list2 ... を逐次検索し、key-form の評価された値と eql な
要素をリスト key-listI の中に見つけると、対応するフォーム formI1
formI2 ... を評価する。見つからないときは、nil を返す。最後のリスト
key-listM として t または otherwise を指定し、それまでの全てが、eql で
なかった時は、formM1 formM2 ... formMN を評価し、formMN の評価結果を
返す。実行する節の選択方法以外は、cond 関数とほぼ同じ。"
:example
"(defun foo (x)
(case x
((a b) 1)
(c 2)
((otherwise) 3)
((t) 4)
(nil 5)
((nil) 6)
(otherwise 7)))
(foo 'a) -> 1
(foo 'b) -> 1
(foo 'c) -> 2
(foo 'otherwise) -> 3
(foo t) -> 4
(foo nil) -> 6
(foo 'bar) -> 7")
(define
"caseq"
(macro (key &body cases)
(let ((k (gensym)))
`(let ((,k ,key))
(declare (ignorable ,k))
(cond ,@(mapcar (lambda (xx)
(if (member (car xx) '(otherwise t) :test #'eq)
`('T ,@(cdr xx))
(if (consp xx)
`((member ,k ',(car xx) :test #'eq) ,@(cdr xx))
`((eq ,k ',(car xx)) ,@(cdr xx)))))
cases)))))
:documentation
"形式 : caseq object (case1 form11 form12 ...)
(case2 form21 form22 ...)
...
(caseM formM1 formM2 ... formMN)
順に case1 case2 ... が object と eq かどうか調べていき、eq になると、
その後にくるフォームを順に評価し、その最後のフォームの評価結果を返す。
1 番最後の caseM を t または otherwise に指定した場合、それまでの全てが、
eq でなかった時は、formM1 formM2 ... formMN を評価する。caseI がリスト
のときには関数 eq のかわりに関数 memq でテストを行なう。
つまり (memq object caseI) の評価結果が nil でない値なら、その後にくる
フォームを評価する。selectq 関数 (同一機能)"
:example
"(caseq 3 ((3 4) 'abc) (t 'xyz)) -> abc
(caseq 'a ((b c d) 'ng) (otherwise 'ok)) -> ok
(caseq 'd ((a) \"a\") ((b) \"b\") ((c) \"c\")) -> nil")
(define
"catch"
(macro (catch-tag &body body)
`(catch ,catch-tag ,@body))
:documentation
"形式 : catch tag &rest form1 form2 ... formN
form1 form2 ... formN を評価し、formN の値を返す。評価中に tag の値と
eq なキャッチタグを指定する throw 式が現れたら、評価を終了し、throw 式
の指定する値を返す。"
:example
"(catch 'a (throw 'a 3)) -> 3
y = 2 a = (b c)
(catch a (seq (!x 1) (throw a y) (!z 3))) -> 2
x = 1 y = 2 z = unbound しかし
(catch a (seq (!x 1) (throw '(b c) y) (!z 3))) は エラー 。")
(define
"catcher"
(macro (tag form &body receiver-forms)
(let ((ft (find-throw form)))
(cond ((and ft receiver-forms)
`(let ((,(cadr tag) (catch ,tag ,form)))
,@receiver-forms))
('T `(catch ,tag ,form)))))
:documentation
"形式 : catcher tag form receiver1 receiver2 ... recieverN
(throw tag val) が form を評価してゆく途中で現れたら、val に束縛され
た変数 tag を用いてレシーバ receiver1 receiver2 ... recieverN を逐次
評価し、recieverN の評価値を返す。レシーバが省略されると val を返す。
throw が現れなかった場合、form を単純に評価するのと同じ。"
:example
"もし z = (p q r), ならば
(catcher 'a (seq (!x 1) (throw 'a z)) (list 1 2 3)) -> (1 2 3)
(catcher 'a (seq (!a '(e f g)) (throw 'a z)) (car a)) -> p
(catcher 'a (seq (!x 1) (throw 'a z)) ) -> (p q r)
(catcher 'a (seq (!x 1) (throw 'a)) (!y 3)) -> 3
(catcher 'a (seq (!x 1) (throw 'a))) -> {undef}0
(catcher 'exception
(do-work)
(case (car exception)
(unexpected-response ...)
(non-number-argument ...)
(table-overflow ...)
(not-implemented-yet ...) ))
この例ではレシーバ (case (car ...) ...) がある。
(do-work) にある throw は
(throw 'exception (list 'unexpected-response some-value))
とする。throw が (do-work) の評価中に起こった場合
(case (car...)...) が評価される。")
(defun find-throw (form &optional taglist)
(if (eq 'throw (car form))
(push (cadr form) taglist)
(dolist (c (remove-if-not #'consp form) taglist)
(let ((tem (find-throw c taglist)))
(when tem
(setq taglist tem))))))
(defmacro catch-x (&body form)
(let ((tags (find-throw form))
(ctag (gensym)))
(if tags
(let ((result `(prog1 (catch ,(car tags) ,@form) (setq ,ctag ,(car tags)))))
(dolist (tg (cdr tags) `(let (,ctag) (values ,result ,ctag)))
(setq result `(prog1 (catch ,tg ,result) (setq ,ctag ,tg)))))
`(values (progn ,@form) nil))))
(define
"catcher-case"
(macro (form &rest receiver-cases)
(let ((ft (find-throw form))
(tag (gensym)))
(cond ((and ft receiver-cases)
`(multiple-value-bind (caught-value ,tag) (catch-x ,form)
(case ,tag
,@receiver-cases)))
('T `,form))))
:documentation
"形式 : (catcher-case form (tag1 receiver11 receiver12 ...)
(tag2 receiver21 receiver22 ...) ...)
catcher と selectq が結合した関数。
tagI が form の評価中に (throw tagI val) という形で出現した場合、
(catcher tagI form receiverI1 receiverI2 ...) と等価な動作となる。
最後の tagN が t のとき、tag1 tag2 ... tag(N-1) がマッチしない他の
throw はすべて tagN が受け取り、tagN に結び付けられたレシーバ中の
変数 caught-value は throw の value に束縛される。caught-value 参照。"
:example
"(catcher-case
(do-work)
(unexpected-response ...)
(non-number-argument ...)
(table-overflow ...)
(not-implemented-yet ...)
(t ...) )")
(define
"caught-value"
(variable nil)
:documentation
"関数 catcher と catcher-case の中で使う。"
:example
"(catcher-case ((!x ((a * (x ** 2)) + (b * x) + c))
(cond ((x > 100) (throw 'p 100))
((100 >= x > 50) (throw 'q 75))
((50 >= x >=0) (throw 'r 25))
(t (throw 's 0))))
('q (!!+1 !z75) (!!+ !sum75 q))
('r (!!+1 !z25) (!!+ !sum25 r))
(t (!!+1 !z0) (!!+ !sum0 caught-value)))")
(define
"ccase"
(cl-macro ccase)
:documentation
"形式 : ccase keyplace
(keylist-1 form11 form12 ... form1N)
(keylist-2 form21 ...)
...
(keylist-M formM1 ...)
形式 keyplace を評価し、それが、keylist の要素と eql な節を選択し、その
節のフォームを順に評価し、最後のフォームのリターン値を返す。
満足されるような節がなければ、継続可能なエラーを警告する。エラーから
継続するために、新しい値を受け入れ、それを keyplace に置く。そして、
テストを再び行う。keyplace の副形式は何回も評価され得る。keyplace は、
関数 setf に受け入れ可能な汎変数参照でなければならない。関数 case に
似ているけれども、陽な otherwise 句あるいは t 句は許されない。"
:example
"(defun test (x)
(ccase x (a 10)
(b 20))) -> test
(test 'a) -> 10
(test 'b) -> 20
(test 'c) -> (not-implemnted-yet ccase x ((a 10) (b 20))))")
(define
"cdaaar"
#'cl:cdaaar
:documentation
"形式 : cdaaar list
(cdaaar list) = (cdr (car (car (car list))))。"
:example
"(cdaaar '((((a (b c)))))) -> ((b c))")
(define
"cdaadr"
#'cl:cdaadr
:documentation
"形式 : cdaadr list
(cdaadr list) = (cdr (car (car (cdr list))))。"
:example
"(cdaadr '(a ((b c) d))) -> (c)")
(define
"cdaar"
#'cl:cdaar
:documentation
"形式 : cdaar list
(cdaar list) = (cdr (car (car list)))。"
:example
"(cdaar '(((a b c)))) -> (b c)")
(define
"cdadar"
#'cl:cdadar
:documentation
"形式 : cdadar list
(cdadar list) = (cdr (car (cdr (car list))))。"
:example
"(cdadar '((a (b c) d))) -> (c)")
(define
"cdaddr"
#'cl:cdaddr
:documentation
"形式 : cdaddr list
(cdaddr list) = (cdr (car (cdr (cdr list))))。"
:example
"(cdaddr '(a b (c d) e)) -> (d)")
(define
"cdadr"
#'cl:cdadr
:documentation
"形式 : cdadr list
(cdadr list) = (cdr (car (cdr list)))。"
:example
"(cdadr '(a (b c (d)))) -> (c (d))")
(define
"cdar"
#'cl:cdar
:documentation
"形式 : cdar list
(cdar list) = (cdr (car list))。"
:example
"(cdar '((a b))) -> (b)")
(define
"cddaar"
#'cl:cddaar
:documentation
"形式 : cddaar list
(cddaar list) = (cdr (cdr (car (car list))))。"
:example
"(cddaar '(((a b c) d)))) -> c")
(define
"cddadr"
#'cl:cddadr
:documentation
"形式 : cddadr list
(cddadr list) = (cdr (cdr (car (cdr list))))。"
:example
"(cddadr '(a (b c d e))) -> (d e)")
(define
"cddar"
#'cl:cddar
:documentation
"形式 : cddar list
(cddar list) = (cdr (cdr (car list)))。"
:example
"(cddar '((a b c))) -> (c)")
(define
"cdddar"
#'cl:cdddar
:documentation
"形式 : cdddar list
(cdddar list) = (cdr (cdr (cdr (car list))))。"
:example
"(cdddar '((a b c d)))) -> (c d)")
(define
"cddddr"
#'cl:cddddr
:documentation
"形式 : cddddr list
(cddddr list) = (cdr (cdr (cdr (cdr list))))。"
:example
"(cddddr '(a b c d e)) -> (e)")
(define
"cdddr"
#'cl:cdddr
:documentation
"形式 : cdddr list
(cdddr list) = (cdr (cdr (cdr list)))。"
:example
"(cdddr '(a b c d)) -> (d)")
(define
"cddr"
#'cddr
:documentation
"形式 : cddr list
(cddr list) = (cdr (cdr list))。"
:example
"(cddr '(a b c)) -> (c)")
(define
"cdr"
#'cdr
:documentation
"形式 : cdr list
list からその第 1 要素を除いてできるリスト (リストの cdr 部) を返す。
list は cadble (car および cdr をとることができる) でなければならない。
関数 car、car と cdr の合成関数 (car や cdr 関数処理を 4 回まで続けて
行う場合には、そのすべての組み合わせについて個々に関数が定義されており、
その名前は c で始まり r で終わる。 c と r の間は car オペレーションに
対して a、cdrオペレーションに対して d を指定する)。
nil に適用できる。"
:example
"(cdr '(a b c)) -> (b c)
(cdr '(a (bc d) ((e) (f g) h))) -> ((bc d) ((e) (f g) h)))
(cdr nil) -> ()
(cdr '(nil)) -> ()")
(define
"cdr!"
(subr (list)
`(setq ,list (cdr ,list)))
:documentation
"形式 : cdr! list
(cdr! list) = (!list (cdr list)) 。
ただし左辺では list は 1 度しか評価されない。"
:example
"x が (a b c) のとき
(cdr! x) -> (b c)")
(define
"ceiling"
#'ceiling
:documentation
"形式 : ceiling number1 &opt number2
number1 / number2 以上の最小の整数を第 1 の値として、
(- number1 (* \"第 1 の値\" number2)) を第 2 の値として 返す。引数が 1 つ
の場合、その値に対して同様の処理をする(割り算は行わない)。"
:example
"(ceiling 2.5) -> !(3 -0.50)
(ceiling -2.6) -> !(-2 -0.600007)
(ceiling 3.9 4.2) -> !(1 -0.300019)")
(define
"cell"
(class cons)
:documentation
"インスタンスは (a b c), (1 . 2) のようなコンス。
cell (32ビットワードのペア) には、最初のワードにデータが格納され (car)、
2 番目のワードに次の cell へのポインタ (cdr) がある。
第 1 cell = 第 2 cell への p ポインタ
第 2 cell = 第 3 cell への q ポインタ
第 3 cell = r nil"
:example
"")
(define
"cellp"
(subr (object)
;;--- TODO
(consp object))
:documentation
"形式 : cellp object
object がセル又は名前付きセルならば、評価値を返し、それ以外なら nil を
返す。"
:example
"(cellp nil) -> nil
(cellp ()) -> nil
(cellp '(a b c)) -> (a b c)
(cellp 'fn(x y)) -> fn(x y) if *fn-notation* is non-nil.
(cellp ''(a b c)) -> nil
(cellp '^(a b c)) -> nil
(cellp '[a b c]) -> nil")
(define
"cerror"
#'cerror
:documentation
"形式 : cerror string1 string2 &rest string3
エラーを報告し、デバッガに入るが、エラーを解決した後に、デバッガから
再び継続することを認める。継続する時、nil を返し、その後、この関数の
呼び出し以下のプログラムコードを実行する。string1 と string2 は
string3 とともに、メッセージ文字列を出力するための制御文字列として、
関数 format に対して与えられる。string2 でエラーメッセージ文字列が指定
され、string1 で継続メッセージ文字列が指定される。"
:example
"(defun test (x)
(cond ((= x 1)
(cerror \"continued message\" \"error message\")))
-> test
(test 1) -> (not-implemented-yet cerror
(\"continued mesage\" \"error message\" ())")
(define
"change-font"
(subr nil)
:documentation
"形式 : change-font fatstring font op &opt integer1 integer2
ファットストリング文字列 fatstring に、処理 op に従い、フォント情報
font を加える。integer1 integer2 が指定されると、fatstring のうち
integer1 から (integer2 - 1) 番目までの文字にフォント情報が加えられる。
(1 番目の文字を示す番号は 0 )。font は、数で与えられ、ビットパターンは、
次のようになる。
全ビットがオフ (引数 font = 0) 通常のフォント
bit-0 がオン (引数 font = 1) 反転のフォント
bit-1 がオン (引数 font = 2) ブリンクのフォント
bit-2 がオン (引数 font = 4) アンダーラインが引かれる
bit-3 がオン (引数 font = 8) 強調 (明るくなる) フォント
これらのフォントすべての組み合わせも可能。例えば、font が 7 なら、
そのキャラクタは、反転し、ブリンクし、アンダーラインが引かれる。処理
op が :and :or :xor :mask で指定されたときは、font と fatstring の
フォント情報の間の論理処理。:to は、古いフォント情報をクリアし、font を
セットする。"
:example
"(!aa (make-fatstring \"abcdefghij\" 1)) -> \"abcdefghij\"
すべてのキャラクタは、反転
(change-font aa 2 :to 0 3) -> \"abcdefghij\"
\"a\" \"b\" \"c\" は、反転しないでブリンク
その他は、反転
(change-font aa 2 :or 3 6) -> \"abcdefghij\"
\"a\" \"b\" \"c\" は、ブリンク
\"d\" \"e\" \"f\" は、反転してブリンク
(change-font aa 2 :and 6 9) -> \"abcdefghij\"
\"a\" \"b\" \"c\" は、ブリンク
\"d\" \"e\" \"f\" は、反転してブリンク
\"g\" \"h\" \"i\" は、通常")
(define
"char"
(subr (string index)
(if (< index (length string))
(cl:char string index)
""))
:documentation
"形式 : char string index
文字列 string の文字位置 index (0 から始まる) の文字を返す。index は、
string の長さより小さくなければならない。"
:example
"(char \"abcdefghij\" 0) -> \"a\"
(char \"abcdefghij\" 3) -> \"d\"
(char \"おはようざいます\" 2) -> \"よ\"
(char \"asd\" 5) -> \"\"")
(define
"char-bit"
(expr nil)
:documentation
"形式 : char-bit char name
文字 char のビット属性のうち、ビット名 name が示すビットがセットされて
いれば nil でない値を返し、そうでなければ nil を返す。"
:example
"")
(define
"char-bits"
(subr nil)
:documentation
"形式 : char-bits char
文字 char のビット属性を示す数を返す。"
:example
"(char-bits #\\a) -> 0")
(define
"char-bits-limit"
(constant 1)
:documentation
"char-bits 関数によって生成される値の上限値 (この値を含まない)。
TAO システムの場合は 1 。"
:example
"")
(define
"char-code"
#'char-code
:documentation
"形式 : char-code char
文字 char のコード属性を示す数を返す。"
:example
"(char-code #\\a) -> 97
(char-code #\\A) -> 65")
(define
"char-code-limit"
(constant char-code-limit)
:documentation
"システムで定められた文字の属性を表す数の上限値であり、TAO システムの
場合は 65536 。char-code 関数で返される値はこの値を越えてはいけない。"
:example
"")
(define
"char-code-p"
(expr nil)
:documentation
"形式 : char-code-p code
code がキャラクタコードなら、code を返し、それ以外なら、nil を返す。"
:example
"(char-code-p 10) -> 10
(char-code-p 127) -> 127
(char-code-p 128) -> nil
(char-code-p 97) -> 97
(char-code-p 52455) -> 52455")
(define
"char-control-bit"
(constant 0)
:documentation
"char-control-bit = 0"
:example
"")
(define
"char-downcase"
#'char-downcase
:documentation
"形式 : char-downcase char
文字 char が大文字を表す文字データなら、対応する小文字を表す文字データ
を返す。そうでなければ char を返す。"
:example
"(char-downcase \"A\") -> \"a\"
(char-downcase \"a\") -> \"a\"")
(define
"char-equal"
#'char-equal
:documentation
"形式 : char-equal char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に等しければ charN、等しくなければ nil を返す。"
:example
"(char-equal #\\a #\\control-a) -> nil.
(char-equal #\\a #\\A) -> \"A\"
(char-equal #\\A #\\a) -> \"a\"")
(define
"char-font"
(subr nil)
:documentation
"形式 : char-font char
文字 char のフォント属性を示す数を返す。"
:example
"(!aa (make-fatstring \"a\" 2) -> \"a\" (点滅)
(char-font aa) -> 2")
(define
"char-font-limit"
(constant nil)
:documentation
"関数 char-font によって生成される値の上限値を示す非負の整数。
TAO システムの場合は 128 。"
:example
"")
(define
"char-greaterp"
#'char-greaterp
:documentation
"形式 : char-greaterp char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コ-ド的、ビット的、及びフォント的
に char1 が大きければ charN、それ以外なら、nil を返す。"
:example
"(char-greaterp #\\a #\\A) -> nil
(char-greaterp #\\a #\\b) -> nil
(char-greaterp #\\b #\\a) -> \"a\"")
(define
"char-hyper-bit"
(constant 0)
:documentation
"char-hyper-bit = 0"
:example
"")
(define
"char-int"
#'char-int
:documentation
"形式 : char-int char
文字 char を符号化した非負の整数を返す (char のフォント属性と、ビット
属性が 0 の場合、char-code 関数と同じ整数を返す)。文字のハッシングの
ために使用する。"
:example
"(char-int \"a\") -> 97
(char-int \"A\") -> 65")
(define
"char-lessp"
#'char-lessp
:documentation
"形式 : char-lessp char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コ-ド的、ビット的、及びフォント的
に char1 が小さければ charN、それ以外なら、nil を返す。"
:example
"(char-lessp #\\b #\\a) -> nil
(char-lessp #\\a #\\b) -> \"b\"")
(define
"char-meta-bit"
(constant 0)
:documentation
"char-meta-bit = 0"
:example
"")
(define
"char-name"
#'char-name
:documentation
"形式 : char-name char
文字 char が名前をもっていればその名前を、持っていなければ nil を返す。
標準の改行と空白文字はそれぞれ Newline 及び Space という名前を持つ。
また、準標準文字も Tab、Page、Rubout、Linefeed、Return、Backspace 等の
名前を持つ。"
:example
"(char-name #\\a) -> nil
(char-name #\\Space) -> \"Space\"
(char-name #\\Backspace) -> \"Backspace\"")
(define
"char-not-equal"
#'char-not-equal
:documentation
"形式 : char-not-equal char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に等しくなければ charN、等しければ nil を返す。"
:example
"(char-not-equal #\\a #\\A) -> nil
(char-not-equal #\\a #\\a) -> nil
(char-not-equal #\\a #\\b) -> \"b\"")
(define
"char-not-greaterp"
#'char-not-greaterp
:documentation
"形式 : char-not-greaterp char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に char1 の値が大きくなければ t 、大きいならば nil を返す。"
:example
"")
(define
"char-not-lessp"
#'char-not-lessp
:documentation
"形式 : char-not-lessp char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に char1 の値が小さくなければ t 、小さいならば nil を返す。"
:example
"")
(define
"char-super-bit"
(constant 0)
:documentation
"char-super-bit = 0"
:example
"")
(define
"char-to-strh"
(subr nil)
:documentation
"形式 : char-to-strh object
object を文字列に変換し、その値を返す。"
:example
"(char-to-strh \"a\") -> \"a\"
(char-to-strh 'ab) -> \"ab\"")
(define
"char-upcase"
#'char-upcase
:documentation
"形式 : char-upcase char
文字 char が小文字を表す文字データなら、対応する大文字を表す文字データ
を返す。そうでなければ、char を返す。"
:example
"(char-upcase \"a\") -> \"A\"
(char-upcase \"A\") -> \"A\"")
(define
"char/="
#'char/=
:documentation
"形式 : char/= char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に等しくなければ charN、等しければ nil を返す。"
:example
"(char/= #\\d #\\d) -> nil
(char/= #\\d #\\x) -> \"x\"
(char/= #\\d #\\D) -> \"D\"
(char/= #\\d #\\d #\\d #\\d) -> nil")
(define
"char<"
#'char<
:documentation
"形式 : char< char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に char1 の値が小さければ charN、小さくなければ nil を返す。"
:example
"(char< #\\d #\\x) -> \"x\"
(char< #\\d #\\d) -> nil
(char< #\\a #\\e #\\y #\\z) -> \"z\"")
(define
"char<="
#'char<=
:documentation
"形式 : char<= char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に char1 の値が小さいか等しいなら charN、そうでなければ nil を返す。"
:example
"(char<= #\\d #\\a) -> nil
(char<= #\\d #\\x) -> \"x\"
(char<= #\\d #\\d) -> \"d\"
(char<= #\\a #\\e #\\y #\\z) -> \"z\"")
(define
"char="
#'char=
:documentation
"形式 : char= char1 &rest char2 ... charN
文字 char1 char2 ... charN を比較し、コード的、ビット的、及びフォント的
に等しければ charN、そうでなければ nil を返す。"
:example
"(char= #\\d #\\d) -> \"d\"
(char= #\\d #\\x) -> nil
(char= #\\d #\\D) -> nil
(char= #\\d #\\d #\\x #\\d) -> nil")