亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 3844 | 回復(fù): 3
打印 上一主題 下一主題

[scheme]求教一個(gè)Sheme操作隊(duì)列的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-03-21 22:53 |只看該作者 |倒序?yàn)g覽
本帖最后由 白云深 于 2010-03-21 22:54 編輯

下面這段代碼是“The Scheme Programming Language"上面的,是描述如何操作隊(duì)列的:
  1. (define make-queue
  2.   (lambda ()
  3.     (let ((end (cons 'ignored '())))
  4.       (cons end end))))

  5. (define putq!
  6.   (lambda (q v)
  7.     (let ((end (cons 'ignored '())))
  8.       (set-car! (cdr q) v)
  9.       (set-cdr! (cdr q) end)
  10.       (set-cdr! q end))))

  11. (define getq
  12.   (lambda (q)
  13.     (car (car q))))

  14. (define delq!
  15.   (lambda (q)
  16.     (set-car! q (cdr (car q)))))
復(fù)制代碼
我用的是PLT Scheme,下面是測(cè)試代碼及輸出

> (define myq (make-queue))(putq! myq 'a)
> (putq! myq 'b)
> myq
((a b ignored) ignored)
> (delq! myq)
> myq
((b ignored) ignored)
> (delq! myq)
> myq
((ignored) ignored)
>


這段代碼基本上看懂了,但有些細(xì)節(jié)理解的還不是很透徹,尤其是putq!,所以我在plt的交互環(huán)境下,試著按照putq!的定義,一步一步執(zhí)行,并查看myq的內(nèi)容,但得到的結(jié)果卻是這樣:
> (define end (cons 'ignored '()))
> (define myq (cons end end))
> myq
((ignored) ignored)
> (set-car! (cdr myq) 'a)
> myq
((a) a)
> (set-cdr! (cdr myq) end)
> myq
(#0=(a . #0#) . #0#)
> (set-cdr! myq end)
> myq
(#0=(a . #0#) . #0#)
> (set-car! (cdr myq) 'b)
> myq
(#0=(b . #0#) . #0#)
> (set-cdr! (cdr myq) end)
> myq
(#0=(b . #0#) . #0#)
> (set-cdr! myq end)
> myq
(#0=(b . #0#) . #0#)
>


上面的操作步驟,原想是要在myq中做兩次putq操作,讓a, b先后進(jìn)隊(duì)列,然后得到的輸出卻完全不是我原先想象的那樣。上面的操作,我在MIT/GNU Scheme上也做了一下,得到的結(jié)果又是另外一種樣子,這里就不貼了。不知道錯(cuò)在什么地方,或許我這種思路就有問題。初學(xué)Scheme,請(qǐng)各位前輩指點(diǎn)一二,先行謝過。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-03-22 01:56 |只看該作者
putq! 里的 end 每次都是新構(gòu)造出來的,你模擬時(shí),每插入一個(gè)新項(xiàng),就要新建一個(gè) end.
guile> (define new-end
  (lambda ()
    (cons 'ignored '())))

guile> (define end (new-end))
guile> (define myq (cons end end))
guile> myq
((ignored) ignored)
guile> (set-car! (cdr myq) 'a)
guile> myq
((a) a)
guile> (define end2 (new-end))
guile> (set-cdr! (cdr myq) end2)
guile> myq
((a ignored) a ignored)
guile> (set-cdr! myq end2)
guile> myq
((a ignored) ignored)
guile> (set-car! (cdr myq) 'b)
guile> myq
((a b) b)
guile> (define end2 (new-end))
guile> (set-cdr! (cdr myq) end2)
guile> myq
((a b ignored) b ignored)
guile> (set-cdr! myq end2)
guile> myq
((a b ignored) ignored)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-03-22 01:58 |只看該作者
自己動(dòng)手畫個(gè)圖可能會(huì)更清楚一些。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-03-22 09:56 |只看該作者
回復(fù) 2# win_hate

多謝版主指點(diǎn),確實(shí)如您所說。感覺有點(diǎn)像C/CPP里面指針的深復(fù)制,淺復(fù)制,不知道我這樣理解對(duì)不對(duì)。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP