在 Ada 中定义通用标量类型包

2024-05-06

我想通过制作一个用于操作多项式的 Ada 包来测试编写 Ada 包的水。可以为多种代数结构定义多项式,因此为了反映这一点,我想使该包通用,以便它可以与浮点数、整数或其他数字子类型一起使用。

我现在想说,我对 Ada 的类型系统如何工作或者它的包系统如何工作知之甚少。网络上似乎缺乏良好的初学者 Ada 信息,所以我必须从中收集我能学到的智慧this http://en.wikibooks.org/wiki/Ada_Programming/Generics不太适合新手的维基教科书文章。

This http://en.wikibooks.org/wiki/Ada_Programming/Type_System#The_Type_Hierarchy页面有一些有关类型层次结构的信息。基于此,我的多项式包的合理类型似乎是Scalar类型,因为显然这是定义算术运算的类型。这就是我尝试过的polynomials.ads:

generic

    MAX_DEGREE : Positive;
    type Element is new Scalar;

package Polynomial is

    type Polynomial is Array (0 .. MAX_DEGREE) of Element;

end Polynomial;

然而,这只是让我"Scalar" is undefined来自 GNAT 的错误。

到目前为止,我真的只是半盲目地摸索,我实际上不知道这些东西是如何工作的。如果您认为我有任何重大误解需要澄清,请告诉我。可能最简单的方法是提供示例polynomial.ads and polynomial.adb我可以从中学习的代码 - 就像多项式类型的定义(具有通用最大度和元素类型)和一个简单的示例函数(例如添加两个多项式),这样我就可以看到通用函数是如何工作的。

PS:有点相关,有没有办法为您的用户定义类型定义属性?


问题在于“Scalar”不是类型的名称。

看看那篇文章中的“通用形式类型”部分,我看不到一个强加您想要的确切限制的部分:“任何标量类型”。 遗憾... 除非有人有更好的主意,否则我会将声明范围扩大到:

type Element is private;

并继续。这可能不是一个缺点:如果您提供自己的运算符,请参阅下一节有关通用正式子程序的内容

with function "*" (X, Y: Element) return Element;

or

 with function "*" (X, Y: Element) return Element is <>;

然后,如果这样做有意义的话,您可以实例化记录(复数?)矩阵等的泛型。这"is <>"将使用已有函数的类型(Float 等)来简化实例化

(编辑:忘记标量包括枚举,对于枚举,多项式甚至乘法通常没有意义!因此将其扩大到“私有”可能不是一个缺点)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ada 中定义通用标量类型包 的相关文章

  • 谁能告诉我 pragma 语句的用法

    谁能告诉我 C 和 Ada 中 pragma 的使用 如果可能的话请提供一些例子 C99 中有 3 个标准编译指示 pragma STDC FP CONTRACT on off switch pragma STDC FENV ACCESS
  • “在此上下文中需要子类型标记”到底是什么?

    I get Subtype mark required in this context at 子类型掩码到底是什么 为什么它在这里抱怨 main adb Open Route Route 1 3 others gt new Location
  • 有谁知道协议缓冲区的 Ada 插件吗?

    我正在寻找用于协议缓冲区的 Ada 插件 看起来除了 Ada 之外 几乎所有语言插件都可用或正在开发中 嗯 我唯一发现的是这篇论文 不幸的是 我没有找到任何翻译工具的源代码 即你所说的plugin 我唯一能告诉的是该工具是用 C 开发的 U
  • 在 Ada 中创建子类型而不指定范围有什么意义?

    在Ada中 我经常看到这样的东西 type Number is new Integer 这有什么意义呢 难道你就不能快乐吗 Integer 我还看到过这样的代码 type Small Number is range 1 5 这对我来说是有道
  • 从 Ada 调用 scanf

    如何从 Ada 调用 scanf 也就是说 大概有一个适当的 pragma import 声明 但是声明会是什么样子呢 我感兴趣的是如何从 Ada 调用更难以驾驭的 C 函数 而不是如何解析字符串本身 所以我不是在寻找纯粹的 Ada 解决方
  • 在 Ada 中实现具有访问类型的抽象函数

    我有一个名为 Statements 的包 其中包含一个名为 Statement 的抽象类型和一个名为execute 的抽象函数 在另一个包中 我有一个CompoundStatement 类型 它是一个Statement 类型 它实现了exe
  • “在 SPARK Ada 中接受挑战”- 后置条件下的总和鬼函数有意外行为

    我正在 SPARK Ada 中编写一个软件 它需要后置条件来验证函数返回值是否等于数组的求和值 在证明函数所在的文件后 我不断收到一个错误 该错误并没有完全加起来 没有双关语的意图 我将发布代码的屏幕截图以便更好地查看 大小为 10 的数组
  • Ada 中的字符串数组

    我在 Ada95 中有一个程序 我必须在其中创建一个字符串数组 该数组可以包含可变长度的字符串 例子 我已经声明了一个数组 其中所有索引都可以存储大小为 50 的字符串 当我为上面的数组分配一个较小的字符串时 我收到 约束错误 Code p
  • SPARK 整数溢出检查

    我有以下程序 procedure Main with SPARK Mode is F array 0 10 of Integer 0 1 others gt 0 begin for I in 2 F Last loop F I F I 1
  • 是否可以强制指定虚拟地址范围?

    我有一个为特定 嵌入式 多处理器 32 位 架构编写的 Ada 程序 我尝试在 64 位 RHEL 上的模拟中使用相同的代码作为共享对象 因为有多个版本 并且我需要在运行时选择一个版本 我遇到的问题是代码中的几个地方编写代码的人 不是我 使
  • Ada GPS IDE 似乎找不到 GtkAda

    我已经安装了 GNAT 编程工作室 GPS 和 GtkAda 它们似乎都工作正常 但是当我尝试在 从模板新建项目 下构建简单窗口项目时 我收到一堆错误 提示 文件 gtk ads 未找到 这似乎是一个目录 依赖性问题 GPS 不知道在哪里寻
  • 从 Ada 程序启动可执行文件并读取结果

    I found this https stackoverflow com questions 32663224 why isnt my gnats standout file descriptor working问题和第一个答案包含一些示例
  • 将分隔的字段合并为一个

    我在 Ada 工作 我有一个非常丑陋的类型 我无法修改 我想做一些易于使用的事情 类型是这样的 for T Ugly Type Alignment use 4 for T Ugly Type Size use 48 for T Ugly T
  • Ada.Containers.Functional_Maps 在 Ada2012 中可用吗?

    有关的信息Ada Containers Functional Maps https docs adacore com gnat rm docs html gnat rm gnat rm the gnat library html ada c
  • Ada:Windows 上的 cmake 和 PLplot 安装

    这是该帖子的后续内容Ada 绘制二维图 https stackoverflow com questions 3210207 ada plotting 2d graphs 我决定创建一个新帖子 因为这是一个单独的问题 Windows 版 PL
  • 从 Ada 访问 c 常量

    我有一个带有这样类型定义的头文件 ifndef SETSIZE define SETSIZE 32 endif typedef struct set unsigned array SETSIZE set t 要使用相应的 C 函数 我需要在
  • 单元测试期间 Ada 中的异常处理

    我正在尝试为我最近编写的一些 Ada 代码编写一些单元测试 我有一个特殊的情况 我希望得到一个异常 如果代码工作正常 我不会 但在这种情况下我所做的只是测试 而不是编写代码 如果我在测试例程中处理异常 那么我不知道如何继续在该过程中进行测试
  • Ada T'Class 的基础知识

    虽然有点不好意思问这个问题 但我知道这是最好的 我已经使用 Ada 编程很多年了 并且几乎可以流利地理解该语言的每个部分 然而 我似乎始终无法完全理解 T Class 借用别人的话 有人可以 像我五岁一样解释一下吗 编辑 我买它只是为了拥有
  • 让 Ada(用 GNAT 编译)从当前目录外部导入文件?

    我正在大学学习编程入门课程 选择的语言是 Ada 我正在 Kate 中编码并使用 GNAT 4 6 3 进行编译 我们必须为我们的程序使用教师提供的库 如下所示 with foo use foo 当然 然后文件foo adb必须包含在与我的
  • 如何在 Ada 中直接访问内存地址?

    所以我是 Ada 的新手 我正在尝试在其中编写内核 但我似乎找不到任何关于如何正确执行此操作的好信息 在 C 语言中 我会这样写 unsigned char videoram char 0xB8000 videoram 0 65 直接访问视

随机推荐

  • 如何在 Imagick 中读取 SVG 字符串?

    我有一个包含 svg 元素标记的字符串
  • 了解用户是否更改了 DataGrid 中的数据的最佳方法是什么?

    我想知道每次用户修改 WPF DataGrid 中的数据时 我可以使用一个事件来做到这一点吗 或者我可以用来覆盖全套数据更改 添加行 删除行 修改行等 的最小事件集是什么 我知道这可能超出了你的要求 但是一旦你这样做了 就很难回头了 无论您
  • 根据 C3 图表中选择的区域显示过滤后的数据 - Angular

    我的代码是https codesandbox io s late forest cuwf7 https codesandbox io s late forest cuwf7 我有 2 个文件 app component html 和 app
  • 标准 C 的通用库?

    是否有任何广为人知的标准 C 通用库 我正在考虑类似于 C 的 Boost 之类的东西 我找到了 C POSIX 库 还有其他库吗 GLib http en wikipedia org wiki GLib GObject http en w
  • 看起来像 iOS7 向左导航 V 形的 Unicode 字符

    最接近 iOS7 向后指向导航栏 V 形的大小 与大写字母一样大或大于大写字母 和形状的 Unicode 字符是什么 我正在寻找一种使用 unicode 字符来模拟通常没有 返回 导航的视图的 向后导航 V 形的方法 常规的 对于锐角比 U
  • 黑白 PNG 转 SVG

    我有一个河流 土地掩码来区分土地与河流 湖泊 该文件的大小为 W 43 200x H 21 600 由于 RAM 立即填满 因此无法打开该文件 我已将文件分成 3600 3600 块 它们可以正常打开 然而 我试图在谷歌地图中绘制陆地上的文
  • 关于 GUI 计时器显示后台线程已用时间的建议?

    Issue 我有一个 PyQt GUI 用户按下按钮即可启动后台线程 workerThread 它是从QThread 我想要一个计时器显示 以QLabel 显示自此以来已经过去了多少时间workerThread开始 我希望这个计时器在wor
  • s60 的 python 希伯来语字符串

    我在 S60 上使用 python 我想使用希伯来语字符串 在 GUI 上表示它们并以短信形式发送它们 看来 PythonScriptShell 不接受这样的表达式 例如 u 我能做些什么 谢谢 事态发展 我添加了这一行 coding ut
  • 如何在 Google Chrome 上启用 WebVR?

    我正在尝试创建一个 WebVR 场景 对于此任务 我想在 Google Chrome 上启用 WebVR 我的操作系统是 Windows 8 我使用打开标志chrome flags WebVR 不存在 我怎样才能启用它 Official c
  • HttpClient 请求拦截器,例如在从服务器获取响应时

    我想在请求尝试命中时打开加载程序弹出窗口 并在收到响应后将其关闭 有什么方法可以使用 httpclient 从一个地方执行它 像这样的事情 Injectable export class I1 implements HttpIntercep
  • 如果 showPopup 仅适用于 API 11,如何将菜单链接到带有 ABS 的视图?

    注意 PopupMenu 在 API 级别 11 及更高版本中可用 http developer android com guide topics ui menus html PopupMenu http developer android
  • 使用 AngularJS 获取 Youtube 视频标题

    我在使用 AngularJS 获取 YouTube 视频标题时遇到问题 这是我到目前为止的代码 服务 js var myServices angular module myServices ngResource myServices fac
  • 如何启动 EC2 实例并在每个实例上上传/运行启动脚本?

    我想自动启动一组 Linux EC2 实例 基本上 我想编写一个脚本 程序 实例化我的给定 AMI 的 N 次出现 对于每个启动的实例 它会上传自定义脚本并让脚本运行到实例中 使用 VMWare 我通常会使用vmrun或 Vix SDK 亚
  • pygame.sprite.Group() 做什么

    我正在关注有关 pygame 的视频 我看到了这段代码 crosshair pygame sprite Group 有人能给我解释一下吗 阅读以下文档pygame sprite Group https www pygame org docs
  • Excel VBA application.visible 立即设置回 True

    我已经设置了一个新的 空的 无模式的用户表单 用最少的代码来解决我的问题 当工作簿打开时 执行以下代码来隐藏 Excel 并显示用户窗体 这是工作簿的唯一代码 Private Sub Workbook Open UserForm1 Show
  • parse_str 在元素前面加上 & 符号?

    我一直在玩 cURL 并尝试将数组作为 POST 变量发送 我决定使用 http build query 按预期传递字符串 curl setopt this gt ch CURLOPT POSTFIELDS http build query
  • 如何计算PHP中内置函数的总数? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何计算
  • 如何从 .Net 中的许多 HTML 文件中读取 xpath 值?

    我的一个文件夹中有大约 5000 个 html 文件 我需要循环遍历它们 打开 使用 xpath 获取 10 个值 关闭并存储在 SQL Server 数据库中 使用 Net 读取 xpath 值的最简单方法是什么 xpath 应该相当稳定
  • 如何通过内存将文件上传到Google Drive [python]

    我一直在论坛上搜索 但没有成功解决我的问题 我正在尝试使用 Google Drive Python API 将内存中的文件上传到 Google Drive 但是 我见过的所有示例都使用磁盘上具有特定文件路径和名称的文件 service bu
  • 在 Ada 中定义通用标量类型包

    我想通过制作一个用于操作多项式的 Ada 包来测试编写 Ada 包的水 可以为多种代数结构定义多项式 因此为了反映这一点 我想使该包通用 以便它可以与浮点数 整数或其他数字子类型一起使用 我现在想说 我对 Ada 的类型系统如何工作或者它的