亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 4846 | 回復(fù): 6
打印 上一主題 下一主題

[Haskell] 請(qǐng)教一個(gè)類型轉(zhuǎn)換的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-01-20 21:58 |只看該作者 |倒序?yàn)g覽

  1. Prelude> let l=[1..2]
  2. Prelude> map (\x -> 1/x) l

  3. <interactive>:1:11:
  4.     No instance for (Fractional Integer)
  5.       arising from a use of `/' at <interactive>:1:11-13
  6.     Possible fix: add an instance declaration for (Fractional Integer)
  7.     In the expression: 1 / x
  8.     In the first argument of `map', namely `(\ x -> 1 / x)'
  9.     In the expression: map (\ x -> 1 / x) l
  10. Prelude> map (\x -> 1/x) [1..2]
  11. [1.0,0.5]
  12. Prelude>
復(fù)制代碼


  • 為什么直接 map 到 [1..2] 上可以,但 map 到綁定到 l 上的 [1..2] 就不行呢?
  • Possible fix: add an instance declaration for (Fractional Integer)

    這里說(shuō)的  instance 指的是什么? 是 / 這個(gè)運(yùn)算嗎?


謝謝。

[ 本帖最后由 win_hate 于 2009-1-20 21:59 編輯 ]

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
2 [報(bào)告]
發(fā)表于 2009-01-20 22:16 |只看該作者
原帖由 win_hate 于 2009-1-20 21:58 發(fā)表

#  為什么直接 map 到 [1..2] 上可以,但 map 到綁定到 l 上的 [1..2] 就不行呢?

這好像和 ghci 自動(dòng)做的一些轉(zhuǎn)換有關(guān)系。你用 :t 看看 [1..2] 和 l 的類型,就會(huì)發(fā)現(xiàn)它們并不一樣。
# Possible fix: add an instance declaration for (Fractional Integer)

這里說(shuō)的  instance 指的是什么? 是 / 這個(gè)運(yùn)算嗎?

這個(gè) instance 是和 type class 對(duì)應(yīng)的。type class 給出了運(yùn)算的接口,instance 給出具體的實(shí)現(xiàn)。Haskell 中運(yùn)算符重載就靠這個(gè)了。

Prelude> map (\x -> 1/x) l

<interactive>:1:11:
    No instance for (Fractional Integer)
      arising from a use of `/' at <interactive>:1:11-13
    Possible fix: add an instance declaration for (Fractional Integer)
    In the expression: 1 / x
    In the first argument of `map', namely `(\ x -> 1 / x)'
    In the expression: map (\ x -> 1 / x) l

上面這個(gè)錯(cuò)誤信息的意思是對(duì)于 type class Fractional 沒(méi)有和 Integer 對(duì)應(yīng)的實(shí)現(xiàn),在 GHCi 中,type class 的查看可通過(guò) :i, 如
Prelude> :i Fractional
class (Num a) => Fractional a where
  (/) :: a -> a -> a
  recip :: a -> a
  fromRational :: Rational -> a
          -- Defined in GHC.Real
instance Fractional Double -- Defined in GHC.Float
instance Fractional Float -- Defined in GHC.Float

可以看到,type class Fractional 定義了三個(gè)運(yùn)算,(/), recip, 和 fromRational,當(dāng)前環(huán)境中有兩個(gè)實(shí)現(xiàn)(instance),F(xiàn)ractional Double 和 Fractional Float。

你想要 (/) 用在 Integer 上(l 的類型為 [Integer]),就得添加一個(gè) instance Fractional Integer,也即對(duì) Integer 實(shí)現(xiàn) Fractional 的那三個(gè)操作。

[ 本帖最后由 MMMIX 于 2009-1-20 22:24 編輯 ]

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-01-20 22:28 |只看該作者
你想要 (/) 用在 Integer 上(l 的類型為 [Integer]),就得添加一個(gè) instance Fractional Integer,也即對(duì) Integer 實(shí)現(xiàn) Fractional 的那三個(gè)操作。


明白了。我下面的需求應(yīng)該很普遍,應(yīng)該不用修改 Integer 類。我試過(guò) fromInteger,還是不行。不知道哪里搞錯(cuò)了。

我有一個(gè)整數(shù)列表,類型為 [Int]。

我想把一個(gè)函數(shù) f x=x/n map 到這個(gè)列表上,n 的類型是個(gè) Int,希望能得到一個(gè)列表,類型為 [Double]。

不知道該怎么做了。

[ 本帖最后由 win_hate 于 2009-1-20 22:35 編輯 ]

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
4 [報(bào)告]
發(fā)表于 2009-01-20 22:34 |只看該作者
原帖由 win_hate 于 2009-1-20 22:28 發(fā)表
我有一個(gè)整數(shù)列表,類型為 。

我想把一個(gè)函數(shù) f x=x/n map 到這個(gè)列表上,n 的類型是個(gè) Int,希望能得到一個(gè)列表,類型為 [Double]。

不知道該怎么做了。

這個(gè)忘說(shuō)了,做下類型轉(zhuǎn)換就可以了。例如把 f 定義為 f x = x / fromInteger n

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-01-20 22:36 |只看該作者
原帖由 MMMIX 于 2009-1-20 22:34 發(fā)表

這個(gè)忘說(shuō)了,做下類型轉(zhuǎn)換就可以了。例如把 f 定義為 f x = x / fromInteger n


我再試一下。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-01-20 22:57 |只看該作者
我明白了。最初的類型是 Int,要 toInteger 后才能 fromInteger.

謝謝。

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
7 [報(bào)告]
發(fā)表于 2009-01-21 00:04 |只看該作者
原帖由 win_hate 于 2009-1-20 22:57 發(fā)表
我明白了。最初的類型是 Int,要 toInteger 后才能 fromInteger.

嗯,Integer 是 Haskell 的無(wú)窮精度整形數(shù),Int 類似于 C 的 int.
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP