您的位置:首页 > 其它

数学集合的lisp表示

2018-01-28 21:34 232 查看
数学上集合的表示
有理数集

 

 
和正实数集

 

 
则可以分别表示为

 

 


 


lisp 表示:

(set-of x (x in '(1 2 3))) ;==> (1 2 3)
(set-of (cons x y) (x in '(1 2 3)) (y is (* x x))) ;==> ((1 . 1) (2 . 4) (3 . 9))
(define map1
(lambda (f ls)
(set-of (f x) (x in ls))))
(map1 - '(1 2 3 2)) ;==> (-1 -3 -2)

从声明视角转换为计算视角:
(set-of x (x in '(1 2 3 4)) (even? x)) ==>
(let loop ([set '(1 2 3 4)])
(if (null? set)
'()
(let ([x (car set)])
(if (even? x)
(set-cons x (loop (cdr set)))
(loop (cdr set))))))

如何转换:
base是已经计算的部分结果,下一步计算将累加到它。
(set-of e base clause ...)细分为:
(_ e base)
把e加到base
(_ e base (x in s) m ...)
等价于B1并上B2...并上Bk, 其中Bi = (_ e base xi m ...)
(_ e base (x is y) m ...)
y的值绑定到x, 然后(_ e base m ...)
(_ e base p m ...)
如果谓词p计算为真,则(_ e base m ...) 否则当前计算结果不变

第二种情况进一步转换为对base的累加:
(_ e basei m ...), basei是处理xi到xk之后的结果。
lisp代码
集合的lisp表示

扩展链接:
David A. Plaisted. Constructs for sets, quantifiers, and rewrite rules in Lisp. Technical Report UIUCDCS-R-84-1176, University of Illinois at Urbana-Champaign Department of Computer Science,
June 1984.  (ps. 这篇文章没找到,谁能帮我找到,将十分感谢!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: