数学集合的lisp表示

10 篇文章 0 订阅
3 篇文章 0 订阅
数学上集合的表示
有理数集
   
和正实数集
   
则可以分别表示为
   
 

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. 这篇文章没找到,谁能帮我找到,将十分感谢!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值