我有一个学校的任务,我必须写一个函数'check()',以列表作为参数。该列表需要3个元素。列表的第一个元素应该是一个运算符,其他两个元素应该是数据类型。函数调用的示例可能如下所示:Scheme - 自定义数据类型?
(check '(+ int int))
它应该在哪里更恰当地说Int。不应该涉及任何数字。这个函数应该返回正确的输出数据类型,具体取决于你在操作中使用的数据类型。例如:
(check '(+ int int))
应返回int。
它还说: “你的程序应该认识到运营商
'+', ' - ', '*', '/', '商', '<', '>', '=', “和”或” 和数据类型: ‘诠释’,‘布尔’和‘真实’
试运行的一个例子可能是这样的:
> (check '(+ int int))
int
> (check '(* int bool))
The operator '*' does not accept bools!
> (check '(= (< (+ int int) (quotient int int)) (> int int)))
bool
> (check '(* int (+ real int)))
The operator '+' must have operands of the same numerical type!
这个任务拉着我的令人惊讶,因为我从来没有真正在Scheme中制作过任何自定义数据类型,甚至不知道这是可能的。我对Scheme(和程序)总的来说)。我目前不知道从哪里开始或做什么!我需要定义int,bool和real吗?我需要定义操作员吗?如果是这样......怎么样?有谁能够帮助我?告诉我从哪里开始或进程应该是什么样子......
问题不一致。在一个例子中,'( - int real)'返回'real'(这很好),但是在另一个例子中,'(+ real int)'抛出一个错误而不是返回'real'。这可能是假的。 –
@ ChrisJester-Young哦,没有注意到。我的错。测试运行输出是正确的。生病编辑我的帖子。 – Schytheron