小编jas*_*x43的帖子

在常见的lisp包中导出照应宏

我在导出宏时遇到问题,当它在同一个包中声明时它会起作用,但在导入它时却不行.我在Windows上使用Emacs,SLIME,Clozure.

包文件

(defpackage :tokenizer
  (:use :common-lisp)
  (:export :tokenize-with-symbols 
       :current-token 
       :advanze-token 
       :peek-token
       :with-token-and-peek
       :with-token))

(defpackage :csharp-parser
  (:use :common-lisp :tokenizer)
  (:import-from :tokenizer :with-token-and-peek :with-token))
Run Code Online (Sandbox Code Playgroud)

Tokenizer文件

(in-package :tokenizer)

(defmacro with-token-and-peek (&body body) 
  `(let ((token (current-token tokenizer))
     (peek (peek-token tokenizer)))
     ,@body))
Run Code Online (Sandbox Code Playgroud)

解析器文件

(in-package :csharp-parser)

(defun expression (tokenizer node-stack)
  (with-token-and-peek
   (cond ((is-number? token) (make-value-node "number" token))
         ((is-bool? token) (make-value-node "bool" token))
         ((is-identifier? token peek) (make-identifier-node tokenizer node-stack))
         (t (make-ast-node :identifier "bla")))))
Run Code Online (Sandbox Code Playgroud)

在编译时给出错误:

csharpParser.lisp:265:3:
  warning: Undeclared free variable TOKENIZER::TOKENIZER (2 references)
           style-warning: Unused lexical variable TOKENIZER::PEEK …
Run Code Online (Sandbox Code Playgroud)

macros symbols common-lisp package

4
推荐指数
1
解决办法
246
查看次数

为什么浮点文字和变量在Go中给出不同的结果?

在下面的简单的计算,cd结束了不同的值(它们是关闭的单个位).这是为什么?

a := 4000.0
b := 1e-9
c := a / b
d := 4000.0 / 1e-9
Run Code Online (Sandbox Code Playgroud)

go

3
推荐指数
1
解决办法
194
查看次数

为什么默认情况下为什么不创建新的String使用intern()?

我已经读过有关intern()的信息,几乎所有地方都写到它会使用==而不是equals()来加速字符串比较。

String a = new String("1");
String b = new String("1");
Run Code Online (Sandbox Code Playgroud)

如果我是对的,上面的代码将在字符串池中创建2个字符串。但是在阅读了有关实习生的内容之后,我看不出有理由在池中保存两个具有相同值的字符串的原因。

所以问题是:为什么Java默认不使用intern()?

如果可能的话,我想获得详细的解释。

java string

1
推荐指数
1
解决办法
72
查看次数

标签 统计

common-lisp ×1

go ×1

java ×1

macros ×1

package ×1

string ×1

symbols ×1