1樓:夏梓耀
compose[A
](g:A
=>T1)
:A=>R=
Haskell的話,還是個函式:(.
)::(b
->c)
->(a
->b)
->(a
->c)
f.g=
\x->f(
gx)那麼在Scala裡也可以這麼搞(假設可以用implicit):
scala
>implicit
class
JoinFunctionsCompactly
[B,C](g
:B=>C)
defined
class
JoinFunctionsCompactly
scala
>valmul3
:Int
=>Int=_*
3mul3
:Int
=>Int=
>scala >valplus1 :Int =>Int=_+ 1plus1 :Int =>Int= >scala >valx =mul3 oplus1x: Int=> Int= >scala >x(1)res0 :Int=6 scala >valy =plus1 omul3y: Int=> Int= >scala >y(1)res1 :Int=4 可問題是為毛Scala沒這麼搞叻?包括之前的那個問題scala中有類似haskell裡面$符號的語法糖嗎? - Scala,我在回答裡也給出了解決方案,但是為毛Scala標準庫里沒有$叻? 因為Haskell的函式是預設柯里化的,而Scala不是,Scala裡大部分函式是多參的,應用不廣。 scala >valplus:( Int, Int) =>Int=_+ _plus:( Int, Int) =>Int= >scala >pluso(( _:Int)* 3) >:10: error: valueois nota memberof( Int, Int) =>Intpluso(( _:Int)* 3)^沒人願意這樣寫函式的: scala >valpls :Int =>Int=> Int=(x :Int )=>(y :Int )=>x+ ypls :Int =>(Int =>Int) = >scala >plso mul3 res14 :Int =>(Int =>Int) = >scala >res14(2 )(1)res16 :Int=7 //或顯示柯里化 scala >plus .curriedo(( _:Int)* 3)res17 :Int =>(Int =>Int) = >其次,Scala的方法,不是函式,只有函式才可以compose,如果方法想組合,就得先用「_」(部分應用)轉為函式,甚是麻煩,相比方法鏈式呼叫,後者優雅的多 這一段內容文不答題,作為擴充套件閱讀吧 (.)邏輯上理解是 -> r Functor的fmap instance Functor ((->)r )where fmap=( .)基於這個事實,在Scala裡也可以這麼搞: (((_: Int)*3 )compose ((_: Int)+1 ))(2 )// 9 (((_: Int)+1 )map ((_: Int)*3 ))(2)// 9更多變體:scalaz/ArrowUsage.scala at ea856759e60d0d3fbf2becc7b4e1918ecdf70085 · scalaz/scalaz · GitHub (還有->做為Profunctor做函式組合:scalaz/Arrow.scala at ea856759e60d0d3fbf2becc7b4e1918ecdf70085 · scalaz/scalaz · GitHub 注:會先隱式將Scala函式lift成=>:型別) implicit 不要。。。Scala玩不起來了,散了吧 Haskell Typed,call by name Lambda calculus Scheme Untyped,call by value lambda calculus Untyped 和 Typed 區別就在於同樣 partial function 的表達 untyped add x y i... 中信公升級白金卡,是不會提額的。因為額度都是共享的,不管你公升級白金卡,年費是多少,那麼額度都是不會變化的。中信的白金卡權益還是比較不錯的,而且根據年費不同,白金卡的等級也不同。所以公升級白金卡,需要考慮兩個問題,第一 白金卡的權益,自己是否需要?第二 白金卡的年費,自己能否接受?這兩個問題才是你需... 1.首先明白編譯器將陣列退化為指標的場景,以下三種情況是不會退化為指標的 char s hello 此時對 s 進行取位址操作,還是使用的陣列首元素,而不是首元素的位址 即 s s 0 1.2 作為常量字串進行初始化賦值的時候 char s hello 此時的 hello 表示的是陣列,而不是指標 ...Haskell的函式式和Scheme的函式式和Clojure的函式式有什麼區別嗎?
函式及陣列的基本解析
陣列做函式引數的退化問題,請問是怎麼回事呢?