如何使用打字方案/球拍

时间:2015-11-22 16:52:40

标签: scheme racket procedure typed

我正在尝试学习打字方案/球拍(?)。在下面我有一个代码示例:

#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作为输出。

我现在很迷茫,我很抱歉我的漂亮问题,但如果有人能帮助我理解这一点,我会很高兴。

注意:过程添加需要实数并输出一个实数,因此它不能很好地跟随示例。但我希望你能理解这个想法。谢谢:))

1 个答案:

答案 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>

这是否回答了你问题的任何部分?