Tôi không biết liệu nó có phụ thuộc vào việc triển khai hay không. Chỉ trong trường hợp vấn đề, tôi đang sử dụng Corman Lisp 3,0"Biến không sử dụng G **** trong chức năng ẩn danh" là gì?
Khi tôi làm một cái gì đó như thế này:
(loop for v being the hash-values of *my-hash-table*
when (> v 1) sum v)
tôi nhận được hai cảnh báo:
;;; Warning: Unused variable G9063 in anonymous function
;;; Warning: Unused variable G9062 in anonymous function
Với số lượng G thay đổi mỗi thời gian.
Kết quả là chính xác. Có ý nghĩa gì? Tại sao chúng xuất hiện? Tôi cho rằng có thể có một số loại lạm dụng cú pháp loop
, dẫn đến những cảnh báo này, nhưng tôi không thấy nó.
'(LET ((#: G9003 NIL) (V NIL) (#: G9000 WORD-COUNT) (#: G9002 NIL)) (WITH-HASH-TABLE-ITERATOR (#: G9001 #: G9000) (LET ((#: G9004 0)) (DECLARE (LOẠI SỐ #: G9004)) (BLOCK NIL (LOOP :: LOOP-BODY NIL (NIL NIL (KHI NÀO (KHÔNG (MULTIPLE-VALUE-SETQ (#: G9003 #: G9002 V) (#: G9001))) (GO LOOP :: END-LOOP)) NIL ((IF (> V 1) (SETQ #: G9004 (+ #: G9004 V)))) (NIL NIL (WHEN (KHÔNG (MULTIPLE-VALUE-SETQ (#: G9003 #: G9002 V) (#: G9001))) (GO LOOP :: END-LOOP)) NIL) ((RETURN-FROM NIL #: G9004)))))))) "Nó rất khó đọc, nhưng tôi đoán G9002 và G9003 là những gì tôi đang tìm kiếm. Nó có ý nghĩa bây giờ, cảm ơn! – akalenuk
@akalenuk Để đọc dễ dàng hơn, bạn có thể thử '(pprint (macroexpand '(vòng lặp ...)))'. Tôi đã làm điều đó với mã bạn dán, và có: http://paste.lisp.org/display/138466 (Tôi đã phải thay đổi một số biểu tượng, ví dụ, 'loop :: end-loop' thành' loop \: \: end-loop' vì SBCL không có gói 'loop', nhưng về cơ bản là giống nhau.) –