符号
编辑教程符号
我会在本章讲解在Lisp/Scheme程序设计语言中具有字符性质的数据类型——符号。
有关符号的基本函数
下列都是有关符号的基本函数。
(symbol? x) | 如果x是一个符号则返回#t。 |
---|---|
(string->symbol str) | 将str转换为符号。 str应该都是小写的,否则地址系统可能无法正常工作。 在MIT-Scheme中,(string->symbol "Hello")和'Hello是不同的。 scheme (eq? (string->symbol "Hello") 'Hello) ; Value: () (eq? (string->symbol "Hello") (string->symbol "Hello")) ; Value: #t (symbol->string (string->symbol "Hello")) ; Value 15: "Hello" |
(symbol->string sym) | 将sym转换为字符。 |
统计文本中的单词
下面的代码是一段统计文本中单词个数的程序,这也是被经常用作演示符号的例子。这个程序使用了哈希表(Hash table)和关联表(Association list),这些都将在下一章中讲解。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; wc.scm
;;; a scheme word-count program
;;;
;;; by T.Shido
;;; on August 19, 2005
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (list->symbol ls0)
(string->symbol (list->string (reverse! ls0))))
(define (char-in c . ls)
(let loop((ls0 ls))
(if (null? ls0)
#f
(or (char=? c (car ls0))
(loop (cdr ls0))))))
(define (read-words fname)
(with-input-from-file fname
(lambda ()
(let loop((w '()) (wls '()))
(let ((c (read-char)))
(cond
((eof-object? c)
(reverse! (if (pair? w)
(cons (list->symbol w) wls)
wls)))
((char-in c #\Space #\Linefeed #\Tab #\, #\. #\ #\( #\) #\= #\? #\! #\; #\:)
(loop '() (if (pair? w)
(cons (list->symbol w) wls)
wls)))
(else
(loop (cons (char-downcase c) w) wls))))))))
(define (sort-by-frequency al)
(sort al (lambda (x y) (> (cdr x) (cdr y)))))
(define (wc fname)
(let ((wh (make-eq-hash-table)))
(let loop((ls (read-words fname)))
(if (null? ls)
(sort-by-frequency (hash-table->alist wh))
(begin
(hash-table/put! wh (car ls) (1+ (hash-table/get wh (car ls) 0)))
(loop (cdr ls)))))))
(wc "opensource.txt")
⇒
((the . 208) (to . 142) (a . 104) (of . 103) (and . 83) (that . 75) (is . 73) (in . 65) (i . 64)
(you . 55) (it . 54) (they . 48) (for . 46) (what . 38) (work . 37) (but . 35) (have . 32) (on . 32)
(people . 32) (are . 30) (be . 29) (do . 29) (from . 27) (so . 26) (like . 25) (as . 25) (by . 24)
(source . 24) (not . 23) (open . 23) (can . 23) (we . 22) (was . 22) (one . 22) (it's . 22) (an . 21)
(this . 20) (about . 20) (business . 18) (working . 18) (most . 17) (there . 17) (at . 17) (with . 16)
(don't . 16) (just . 16) (their . 16) (something . 15) (than . 15) (has . 15) (if . 15) (when . 14)
(because . 14) (more . 14) (were . 13) (office . 13) (own . 13) (or . 12) (online . 12) (now . 12)
(blogging . 12) (how . 12) (employees . 11) (them . 11) (think . 11) (time . 11) (company . 11)
(lot . 11) (want . 11) (companies . 10) (could . 10) (know . 10) (get . 10) (learn . 10) (better . 10)
(some . 10) (who . 10) (even . 9) (thing . 9) (much . 9) (no . 9) (make . 9) (up . 9) (being . 9)
(money . 9) (relationship . 9) (that's . 9) (us . 9) (anyone . 8) (average . 8) (bad . 8) (same . 8)
..........)
说明:
行号 函数 说明 09 (list->symbo ls0) 将一个由字符构成的列表(ls0)转换为一个符号 12 (char-in c . ls) 检查
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟