Racket中的身份功能有什么用?

时间:2016-08-20 06:30:06

标签: scheme racket

身份功能有什么用?它只返回相同的值。因此,为什么不简单地放(identity x)而不是放x?有人可以举一些在Racket / Scheme中使用身份功能的例子吗?这些文档页面上没有示例:https://docs.racket-lang.org/htdp-langs/beginner.html#%28def.htdp-beginner.%28%28lib._lang%2Fhtdp-beginner..rkt%29.identity%29%29 https://docs.racket-lang.org/reference/procedures.html?q=identity#%28def. %28%28lib._racket%2Ffunction..rkt%29._identity%29%29

1 个答案:

答案 0 :(得分:7)

当函数执行由其参数定制的某种映射时,identity函数主要用作某些高阶函数(将函数作为参数的函数)的参数,并且您希望传递值不变。

Scheme / Racket中一个非常常见的习惯用法是使用(filter identity ...)从列表中删除所有#f值:

> (filter identity '(1 2 #f 4))
'(1 2 4)

这是有效的,因为filter将提供的函数应用于列表的每个元素,然后丢弃导致#f的值。通过使用identity,可以检查值本身。从这个意义上讲,identity是功能性的“无操作”。

您有时会看到这个成语拼写为(filter values ...)而不是(filter identity ...),因为values恰好是提供一个参数时的标识函数,它来自racket/base而不是racket/function identity。不过,我更喜欢明确使用if(isset($_POST["Submit"])) { // echo "value is .".$a; echo $_POST["gr_num"]; echo $_POST["school_code"]; $sqlstr="select studentname from gr_master where grid='".$_POST["gr_num"]."' and schoolcode='".$_POST["school_code"]."'"; $sqlstr1="select schoolname from school_master where schoolcode='".$_POST["school_code"]."'"; $result=mysql_query($sqlstr); $result1=mysql_query($sqlstr1); $row=mysql_fetch_array($result); $row1=mysql_fetch_array($result1); echo $row["studentname"]; $studentname_var=$row['studentname'].'"'; echo $studentname_var; } 的版本,因为我认为发生的事情有点清楚。

†对于Haskell等效问题,身份函数的描述来自this nice answer