我正在尝试学习打字方案/球拍(?)。在下面我有一个代码示例:
#lang typed/racket
(: add (Real Real -> Real))
(define (add x y)
(+ x y))
我想实现一个过程“check”,它检查运算符是否允许两种数据类型。例如,
(check '(+ int int))
应该导致
int
但是
(check '(* int (+ real int)))
应该会产生这样的结果:
运算符'+'必须具有两个相同(数字)类型的操作数。
也就是说,检查应该列出一个。
问题:
如何实施“检查”?首先我虽然“好吧,我有一个列表,所以让我们使用汽车和cdr”来获取操作员和操作数,但它不起作用,我甚至不知道为什么它不起作用。我也想做if if语句(if(和(= xy)(或(= x int)(= y int))等等来进行检查但是...不认为这是正确的方法去。
我应该制作“添加”程序吗?有没有其他方法可以做到这一点?在示例中,它们看起来只是使用“+”,“ - ”等等。最后;如何检查输入“int”是否为int,然后将int作为输出。
我现在很迷茫,我很抱歉我的漂亮问题,但如果有人能帮助我理解这一点,我会很高兴。
注意:过程添加需要实数并输出一个实数,因此它不能很好地跟随示例。但我希望你能理解这个想法。谢谢:))
答案 0 :(得分:1)
你提出了一个引人入胜的问题,并没有一个简单的答案。
您尝试编写的程序本质上是一种类型检查程序。也就是说,它接受一个表达式,并检查给定函数的域是否包括它被调用的参数。我们可以写下其中一个,但我怀疑你会不满意。在这里,让我现在写一个....
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="7">
<TextView
android:id="@+id/tv_monday"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Monday" />
<TextView
android:id="@+id/tv_tuesday"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Tuesday" />
...
</LinearLayout>
这是否回答了你问题的任何部分?