Mar*_*ann 3 loops common-lisp type-declaration
我想做一些整数运算,并在检查SBCL是否可以提高速度(如果我提供有关所type使用的值的明确信息)。虽然我很容易declare在中使用defun或let直接使用它,但是我不知道将语句放在loop构造中的什么位置。
我遇到了iterate提供此类可能性的软件包文档,但希望暂时坚持使用。
一个存根示例可能如下所示:
(loop :for i from 1 upto 100 :collect
(loop :for j from i upto 100
:collect (* i j)))
Run Code Online (Sandbox Code Playgroud)
我怎样才能告诉Lisp i并且j是类型fixnum?
用途of-type:
(loop :for i of-type fixnum from 1 upto 100 :collect
(loop :for j of-type fixnum from i upto 100
:collect (* i j)))
Run Code Online (Sandbox Code Playgroud)
另外,WITH子句的示例也不错。
就像莱纳说,你可以省略of-type为简单的类型,例如,fixnum
和float,但违反了“节奏” loop,从而loop与用户的形式交替的关键词。
还要注意,声明i并j成为fixnums是不足够的,以确保fixnum乘(平方most-positive-fixnum肯定不是一个fixnum)。因此,为了获得最快可能倍增,你将需要申报i,并j要
(unsigned-byte 1000)其
确实需要of-type。
当然,所有这些都没有必要。编译器应该足够聪明。:-)
对于简单的类型一样fixnum,float,t并且nil你可以只写FOR子句中的变量之后的类型。您还可以在数字累加子句中添加一个子句之类的类型sum:
(loop for i fixnum below 10
for j fixnum from 1
sum (* i j) fixnum)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |