这些功能有什么不同?

时间:2015-10-20 20:17:32

标签: function sml smlnj

我有一个功能:

fn x => x

现在,参数x应用于real和int(例如(x:real))。两个函数有什么不同,有什么相同,即使它们似乎有效地做了同样的事情:

1. fn (x:int) => x;
2. fn (x:real) => x;

3 个答案:

答案 0 :(得分:1)

这三个都是身份函数,但后两个不是多态的。

非多态版本不完全相同 - 一个类型int -> int,另一个类型real -> real,因此它们只能分别应用于int和{ {1}}。

示例:

real

相比之下,多态版本适用于所有内容:

Standard ML of New Jersey v110.79 [built: Wed Oct  7 00:59:52 2015]
fn (x:int) => x;
val it = fn : int -> int
- fn (x:real) => x;
val it = fn : real -> real 
- (fn (x:int) => x) 3;
val it = 3 : int
- (fn (x:int) => x) 3.0;
stdIn:2.1-2.22 Error: operator and operand don't agree [tycon mismatch]
  operator domain: int
  operand:         real
  in expression:
    (fn x : int => x) 3.0
- (fn (x:real) => x) 3;
stdIn:1.2-1.22 Error: operator and operand don't agree [overload conflict]
  operator domain: real
  operand:         [int ty]
  in expression:
    (fn x : real => x) 3
- (fn (x:real) => x) 3.0;
val it = 3.0 : real

答案 1 :(得分:1)

在1.和2.中,您没有应用该功能,您正在指定类型。要应用此功能,请写>>> import requests >>> from bs4 import BeautifulSoup >>> Link = 'https://en.wikipedia.org/wiki/Category:1990' >>> q = requests.get(Link) >>> soup = BeautifulSoup(q.text) >>> subtitles = soup.findAll('div',{'class':'links'}) >>> subtitles [] (fn x => x) 5。当您执行此函数应用程序时,确实推断x具有您明确写入的类型。

以下两个功能之间的区别在于它们采用不同的类型。这两个函数之间的相似之处在于它们对它们的输入做了相同的操作,即它们只是将它返回。

答案 2 :(得分:0)

这两个函数都输入x和输出x。

但是,在第一个函数中,输入x 已投放 int 类型,而第二个函数则为实时类型>

因此,第一个函数的类型为(real -> real),第二个函数的类型为Blog.objects.annotate(author2=author).filter(Q(author__name='bob') & Q(author2__name='mary'))