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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4359 | 回復: 4
打印 上一主題 下一主題

一個宏的解釋,lisp中“文件描述符”的處理 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-07-20 15:43 |只看該作者 |倒序瀏覽
本帖最后由 xdshting 于 2010-07-20 16:14 編輯

1,
(defmacro with-connected-socket ((var socket) &body body)
  "Bind `socket' to `var', ensuring socket destruction on exit.

`body' is only evaluated when `var' is bound to a non-null value.

The `body' is an implied progn form."
  `(let ((,var ,socket))
     (unwind-protect
         (when ,var
           (with-mapped-conditions (,var)
             ,@body))
         (when ,var
              (socket-close ,var)))))
紅色的部分,沒看出是什么意思
為什么要把,socket復制給var?
難道不復制就不能保證socket關閉( ensuring socket destruction on exit.)?

2,
(defun test-close ()
  (let ( (in (open "/home/linpeng/text"))
    (format t "~a" (read-line in))
    (let ((in2 in))
      (format t "~a" (read-line in2))
      (close in2)
      (format t "~a" (read-line in2)))   ;;;這里可以讀文件,奇怪,上面明明關掉了,下面同樣
    (format t "~a" (read-line in))
    (close in)
    (format t "~a" (read-line in))))
這里,我是想模擬上面那個宏的操作,但是發(fā)現(xiàn),close根本沒用,close之后,“文件描述符”依然可用,不知道是為什么?
謝謝

3,
其實這里我想問的根本問題是,“文件描述符”是怎么傳遞的,
比如在第二個例子中,用(let ((in2 in)))來吧in復制給in2,如果按照引用傳遞(in2,in指向相同的值)來理解,當close(in2) 只后,應該不能再在使用in讀取文件了,但結(jié)果相反,更夸張的是還能用in2繼續(xù)讀取,就像close沒起做用一樣


環(huán)境是最新的sbcl

另外,問一個問題
在包的定義中
(defpackage #rg.mapcar.ftp.client
  (:use #:common-lisp
        #:split-sequence
        #:usocket)
  (:nicknames #:ftp.client #:ftp)
  (:export #:ftp-connection
           #:with-ftp-connection
           #:connect-to-server))
前面的#:是什么作用?謝謝

論壇徽章:
2
白羊座
日期:2013-10-29 13:29:222015亞冠之全北現(xiàn)代
日期:2015-10-25 08:13:02
2 [報告]
發(fā)表于 2010-07-20 19:42 |只看該作者
1. 不好解釋,應該是讓 var為空時,就什么都不做吧.
2.你試過了嗎?真這樣的話就很變態(tài)了! 不可能成立的.
3. '#'完全是用來裝B的, 為了讓程序員區(qū)分新的symbol. 有無#沒關系.

我知道就這么多,一起學吧.

論壇徽章:
0
3 [報告]
發(fā)表于 2010-07-20 21:39 |只看該作者
你給的代碼我測試過,close 是起作用的,跟你說的不一樣。

ensuring socket destruction 是有點費解。但把 socket 綁定到 var 還是可以接受的。

論壇徽章:
0
4 [報告]
發(fā)表于 2010-07-22 14:36 |只看該作者
本帖最后由 xdshting 于 2010-07-22 15:16 編輯

文件內(nèi)容
[linpeng@node1 ~]$ more text
line 1
line 2
line 3
line 4
line 5
line 6
[linpeng@node1 ~]$ pwd
/home/linpeng
[linpeng@node1 ~]$

程序(沒變,上面拷貝的):
(defun test-close ()
  (let ( (in (open "/home/linpeng/text")))
    (format t "~a" (read-line in))
    (let ((in2 in))
      (format t "~a" (read-line in2))
      (close in2)
      (format t "~a" (read-line in2)))   
    (format t "~a" (read-line in))
    (close in)
    (format t "~a" (read-line in))))
程序的輸出:
環(huán)境是sbcl最新版 + Eclipse + cusp + fedroa9
S-SYSDEPS>
(test-close)

line 1line 2line 3line 4line 5
NIL

奇怪了,請您看看我的步驟有錯嗎?


又有一個新問題
(loop  :for cons on '(1 2 3 4 5 6) :do (format t "~a" (car cons)) :when (cdr cons) :do (format t ","))
這條語句中 在for,do,when前面都加了冒號,其功能與沒有冒號一樣,請問為什么?

我覺得這可能與關鍵字都是定義在keyword包中有關,我還是不知道。。。?

論壇徽章:
0
5 [報告]
發(fā)表于 2010-07-23 09:31 |只看該作者
那就怪了

1.lisp 是直接復制你的代碼,只修改了下路徑

  1. (defun test-close ()
  2.   (let ( (in (open "text")))
  3.     (format t "~a" (read-line in))
  4.     (let ((in2 in))
  5.       (format t "~a" (read-line in2))
  6.       (close in2)
  7.       (format t "~a" (read-line in2)))   
  8.     (format t "~a" (read-line in))
  9.     (close in)
  10.     (format t "~a" (read-line in))))
復制代碼
text 直接復制你的
line 1
line 2
line 3
line 4
line 5
line 6


我的執(zhí)行方式為:打開 sbcl,load 1.lisp, 執(zhí)行 test-close 函數(shù)

This is SBCL 1.0.29.11.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* (load "1.lisp")

T
* (test-close)
line 1line 2
debugger invoked on a SB-INT:CLOSED-STREAM-ERROR in thread #<THREAD "initial thread" RUNNING {AA5E5D1}>:
  #<SB-SYS:FD-STREAM for "file /home/zxl/src/text" {AAE17F1}> is closed

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL:CLOSED-FLAME
#<SB-SYS:FD-STREAM for "file /home/zxl/src/text" {AAE17F1}>)[:EXTERNAL]
0]


我用 clisp 也是類似結(jié)果。
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP