2016-10-24 3 views
-1

次の式の型を示すのに役立ちますか?これらの式のタイプは何ですか?

式がプロシージャを定義する場合は、定義されたプロシージャのタイプを示します。知られていないタイプの場合は、A、B、Cなどを使用できます。

私はそれをすることができませんでした。 (lambda (p) (+ 1 (p 3)))

我々はプラスタイプ+持っていることを知っている:最初の例を見てみると

1)(lambda (p) (+ 1 (p 3)))

2)(lambda (x y comp) (if (comp x y) (+ x 1) (+ y 1)))

+0

あなたが知っているところから始めてください(たとえば、 '(+5 a)'、 'a'は数字でなければなりません)、そして「空白を埋める」などです。 – molbdnilo

答えて

0

する数値を - >数値。ここから、いくつかを推論することができます。 pが3のNumberを受け取った場合、その入力の型はNumberであると判断できます。これまでのところ、p:Number - > ????を知っています。次に、(p 3)の値がどこにあるかを見ることができます。このデータは+で直ちに使用されます。私たちはすでにプラスのタイプが+:Number Number - > Numberであることを知っています。次に、(p 3)の出力も数値でなければならないことがわかります。したがって、私たちはp:Number - > Numberを知っています。これは、ラムダ全体が型(Number - > Number) - > Numberを持つことを意味します。

(lambda (x y comp) (if (comp x y) (+ x 1) (+ y 1))) xとyはプラスで使用されるため、xとyはNumber型でなければならないことがわかります。ここからは、if式で使用されているように、compの出力はブール値でなければならないこともわかっています(すべてのスキームではないにしてもほとんどの場合、ifステートメントで非false値が真とみなされるため、任意の型を返すことができます)。最後に、compはxとyの両方を取ります。どちらもNumbersであるため、compの型はNumber Number - > Booleanでなければなりません。これにより、ラムダ番号(Number Number - > Boolean) - > Numberの型が作成されます。

関連する問題