scheme set-car! 模拟


#lang scheme

( define li '( 1 2 3 4 ) )

( define-syntax set-car!
   ( syntax-rules ()
      ( ( set-car! li elem )
        ( set! li ( cons elem ( cdr li ) ) ) ) ) )

( set-car! li '( a b ) )


或者


#lang scheme

( define ( s-cons x y )
   ( define ( set-x! v )
      ( set! x v ) )
   ( define ( set-y! v )
      ( set! y v ) )
   ( define ( dispatch m )
      ( cond [ ( eq? m 'car ) x ]
             [ ( eq? m 'cdr ) y ]
             [ ( eq? m 'set-car! ) set-x! ]
             [ ( eq? m 'set-cdr! ) set-y! ]
             [ else ( error "Undefined operation" m ) ] ) )
   dispatch )

( define ( s-car z )
   ( z 'car ) )

( define ( s-cdr z )
   ( z 'cdr ) )

( define ( s-set-car! z val )
   ( ( z 'set-car! ) val )
   z )

( define ( s-set-cdr! z val )
   ( ( z 'set-cdr! ) val ) 
   z )

( define z ( s-cons 1 2 ) )
( s-car ( s-set-car! z 111 ) )


或者:


(require rnrs/base-6) 
(require rnrs/mutable-pairs-6) 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值