是否有任何支持多个整数大小的方案方言?

问题描述 投票:0回答:1

我想用 Scheme 编写一个程序来模拟一个假设的 CPU 的硬件寄存器。为此,我将需要符合预期位宽的有符号和无符号整数数据类型,用于上溢和下溢等行为。

具体来说:我想要 {signed,unsigned} x {8-bit,16-bit,32-bit,64-bit}。

但到目前为止,我对 Scheme 的所有体验都只是一类有符号整数,其中单个范围是实现定义的(暂时忽略 BIGNUM。)

是否有任何现有的 Scheme 方言允许程序员——可能通过文字前面的一些前缀——说例如“将此值视为精确的 16 位无符号值”?

除了 Schemes,我还会考虑其他 lispy 语言。我只需要知道是否有一些既定的语法来完成上述任务。

scheme
1个回答
1
投票

这在很大程度上取决于实现,除非您想在所有地方使用模块化算法。 Kawa Scheme 通过其 type annotations 和 JVM primitive integer types 支持它们。例如:

#|:kawa:1|# (define (+/u16 a::ushort b::ushort) ::ushort (+ a b))
#|:kawa:2|# (+/u16 65535 50)
49
#|:kawa:3|# (->ushort 500) ; Coerce a literal integer to a ushort
500
#|:kawa:4|# (->ushort 65537) ; does range checking
/dev/tty:9:11: warning - integer 65536 not in range of ushort
1
#|:kawa:5|# (as ushort 65537) ; this form however is quiet
1
#|:kawa:6|# (ushort? -10)
#f

当然,许多 Schemes 支持 SRFI-4 Homogenous Numeric Vectors 用于存储固定宽度类型的数组,但这并没有对它们进行任何算术运算。当然,如果您想将一组寄存器表示为一个,仍然有用。

© www.soinside.com 2019 - 2024. All rights reserved.