脑供血不足中医叫什么| 感恩节是什么时候| 先知是什么意思| iac是什么意思| 大葱喜欢什么肥料| 5月12号是什么日子| 26岁属什么的生肖| 舌苔厚吃什么药| 美国为什么不敢动朝鲜| 什么水什么山| 四月十五是什么星座| 耳石症是什么引起的| 舌头火辣辣的是什么病| 乳腺炎吃什么消炎药| 长庚是什么意思| 眼睛疼吃什么药效果最好| 黄山在什么地方| 分野是什么意思| 已是什么意思| 气是什么意思| 掮客是什么意思| 肿瘤手术后吃什么好| 一直咳嗽不好是什么原因| 白果治什么病| hm是什么牌子| 蜱虫用什么药可以消灭| 文化大革命什么时候| gucci什么品牌| 两会什么时候开| 4月2号是什么星座| 卵巢筛查要做什么检查| 蛇靠什么爬行| 脱发吃什么| 下身灼热感什么原因| 为什么正骨后几天越来越疼| 手心发红是什么原因| 保温杯什么牌子好| 宫颈细胞学检查是什么意思| 油碟是什么| 风肖是什么生肖| 4月23日是什么日子| 性腺六项是查什么的| 肺大泡有什么危害| 鱼香肉丝用什么肉| positive是什么意思| 花园里有什么花| 孕妇什么情况容易早产| 五台山求什么最灵| 月经不来又没怀孕是什么原因| 胎儿肾盂分离是什么意思| 异卵双胞胎什么意思| 吃什么补羊水最快| kpa是什么意思| 11.22是什么星座| 皮肤白斑点是什么原因| 337是什么意思| 肠胃不好吃什么| 为什么发动文化大革命| 甲状腺不能吃什么食物| 适宜是什么意思| 押韵是什么意思| 急性上呼吸道感染是什么引起的| 腋窝出汗是什么原因| 司令是什么级别| 今年什么时候立秋| 脑瘤是什么原因引起的| 为什么没人敢动景甜| 肾看什么科| 酸辣粉的粉是什么粉| 山楂和什么泡水喝减肥效果最好| 舌头变黑是什么原因| 有酒瘾是什么感觉| 梦见别人家拆房子是什么预兆| 打完除皱针注意事项有什么| 舌头白吃什么药| 千钧一发是什么生肖| 心脏肿大是什么原因| ac是胎儿的什么| 呱唧呱唧是什么意思| 晚霞是什么颜色的| 梦见好多葡萄是什么意思| 什么床垫好| 必有近忧是什么意思| 骨质欠规整是什么意思| 本能反应是什么意思| 狗不能吃什么东西| 6.20是什么星座| 美国总统叫什么名字| 胎盘低是什么意思| 白介素6升高说明什么| 徒手是什么意思| 幽默什么意思| 反复口腔溃疡是什么病的前兆| 报道是什么意思| 肝血不足吃什么中成药| 宝宝不长肉是什么原因| 为什么叫水浒传| 空腹吃西红柿有什么危害| 大张伟原名叫什么| 异性朋友是什么意思| 虚有其表的意思是什么| 高血压中医叫什么病| 闭经吃什么药| 第一次同房要注意什么| 一到晚上就咳嗽是什么原因| 梦见西瓜是什么意思| 缓刑是什么意思| 阴道放屁是什么原因| 语感是什么意思| 卡地亚手表什么档次| 紫皮大蒜和白皮大蒜有什么区别| 吃什么有奶| 什么情况下需要做造影| 宫颈ecc是什么意思| 经济危机是什么意思| 风声鹤唳是什么意思| 劳碌命是什么意思| 喝酒头疼吃什么药| 淋巴结有血流信号预示着什么| 波长是什么| ec是什么意思| 口干口臭口苦吃什么药| 试孕纸什么时候测最准| 下过海是什么意思| 碱性磷酸酶偏高是什么原因| 全身发黄是什么原因| 阑尾炎可以吃什么水果| 头晕是什么引起的| 小蛇吃什么| 王各念什么| 小儿拉肚子吃什么药好得快| 沁什么意思| 黄瓜与什么食物相克| 头发硬适合什么发型| 农村适合养殖什么| 固本培元什么意思| 费力不讨好是什么生肖| 天然是什么意思| 6月8号什么星座| fpd是什么意思| eu是什么元素| 身上无力是什么原因| 吃什么解酒| 跨性别是什么意思| 两个立念什么| 海洋里面有什么动物| 孕早期适合吃什么水果| 淡菜是什么| 鳄龟吃什么食物| 因果循环是什么意思| 九月五日是什么节日| 磷是什么| 例假来的是黑色的是什么原因| 眼睛发黑是什么原因引起的| 1月12号是什么星座| 下巴发黑是什么原因| 拉拉什么意思| 一棵树是什么品牌| 厘米为什么叫公分| 靥是什么意思| 肠子有问题有什么症状| 棕色是什么颜色| 什么是年金| 舌头起泡吃什么药好| 打喷嚏流清鼻涕是什么感冒| 墙内开花墙外香是什么意思| 渚是什么意思| 什么运动有助于长高| 聊胜于无的聊是什么意思| 什么是颈椎病| 吃什么补肝最好| 他乡遇故知什么意思| 黄瓜籽有什么功效| 大学生当兵有什么好处| 神经衰弱是什么病| 咳嗽有黄痰是什么原因| 9月24号什么星座| 左肾尿盐结晶是什么意思| 10年什么婚| 不带壳的蜗牛叫什么| cpk是什么意思啊| 丙氨酸氨基转移酶高吃什么药| 洋地黄中毒首选什么药| 腺肌症吃什么食物好| 玉越戴越亮是什么原因| 19朵玫瑰代表什么意思| 荀彧字什么| 下发是什么意思| 盆腔积液吃什么消炎药| 甘油三酯高吃什么降得快| 一箭双雕是什么生肖| 虢是什么意思| 腺肌瘤是什么意思| 多喝水有什么好处和坏处| 化疗期间吃什么升白细胞快| 小叶苦丁茶有什么作用和功效| esr是什么意思| 送百合花代表什么意思| 红色裤子配什么上衣好看| 小的五行属什么| 什么人容易得脑溢血| 马上封侯是什么意思| 水滴鱼长什么样子| 经期吃凉的东西有什么影响| 射进去是什么感觉| 如痴如醉是什么意思| 原浆酒是什么意思| 冷战的男人是什么心理| 帕罗西汀是什么药| 闰月鞋买什么颜色| 如虎添翼是什么生肖| 中医调理身体挂什么科| 一月出生是什么星座| 尿精是什么原因造成的| 肌肉痉挛用什么药能治好| 蓝色妖姬代表什么含义| 结缔组织病是什么病能治愈吗| 肚脐下面疼是什么原因| 一醉方休下一句是什么| 冰岛为什么不让随便去| 胚芽发育成什么| 什么叫凤凰男| 脊柱疼是什么原因| 拉肚子应该挂什么科| 脾胃虚寒能吃什么水果| 双向情感障碍是什么意思| 8月17号是什么星座| 为什么会长阴虱| 生长因子是什么| 阴道松弛吃什么药| ar是什么意思| 咳嗽吃什么药好得快| 一个三点水一个除念什么| 截疟是什么意思| 瓷娃娃什么意思| 什么什么挺立| 五指毛桃有什么功效| 检查肝功能挂什么科| 因果循环是什么意思| 格拉苏蒂手表什么档次| 什么店可以买到老鼠药| 19岁属什么的生肖| 看静脉曲张挂什么科| 干净的反义词是什么| 蛋白质有什么作用| 梦见买床是什么意思| 哺乳期感冒吃什么药不影响哺乳| 梦见捡菌子是什么预兆| 为什么女的会流水怎么回事| 下巴脱臼是什么感觉| 食物链是什么意思| 胯疼是什么原因| 掌中宝是什么| 黄桃什么时候成熟| 7.14什么星座| 七月八日是什么日子| 紫菜吃多了有什么坏处| 鹿的部首是什么| 晚上八点是什么时辰| 眼睛浮肿是什么原因引起的| 胃肠感冒可以吃什么水果| 黑脚鸡是什么品种| 什么茶对胃好| 酒蒙子什么意思| 百度Vai al contenuto

Da Wikipedia, l'enciclopedia libera.
Haskell
linguaggio di programmazione
AutoreSimon Peyton Jones, Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler
Data di origine1990
Ultima versioneHaskell 2010 (luglio 2010)
Utilizzogeneral-purpose
Paradigmifunzionale, modulare
Tipizzazioneforte, statica
Estensioni comuni.hs, .lhs
Influenzato daClean, FP, Gofer, Hope e Hope+, Id, ISWIM, KRC, Lisp, Miranda, ML e Standard ML, Orwell, SASL, SISAL, Scheme
Ha influenzatoAgda, Bluespec, C++11/Concepts, C#/LINQ, CAL, Cayenne, Clean, Clojure, CoffeeScript, Curry, D, Elm, Epigram, Escher, F#, Isabelle, Java/Generics, Kaya, Mercury, Omega, Perl 6, Python, Qi, Scala, Timber, Visual Basic 9.0, Rust
Implementazione di riferimento
Sistema operativoMultipiattaforma
Sito webwww.haskell.org
百度 以人民的公粮负担为例,从1939年的5万石剧增至1941年的20万石。

Haskell è un linguaggio di programmazione puramente funzionale general-purpose creato da un apposito comitato alla fine degli anni ottanta principalmente per analizzare le caratteristiche dei linguaggi[1]. è stato chiamato così in onore del matematico e logico statunitense Haskell Curry.

L'inizio della programmazione funzionale

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Programmazione funzionale.

Tutto iniziò nel 1978 con il discorso di John Backus intitolato "Can Programming be liberated from the Von Neumann style?"[2] con il quale si proponeva la programmazione funzionale non solo come una mera curiosità matematica, bensì anche per scopi industriali.

Tra gli anni settanta ed ottanta del XX secolo, vennero implementati diversi linguaggi funzionali, seppur ancora strettamente legati ai linguaggi imperativi, che si basavano più sul concetto computazionale del lambda calcolo. Alcuni esempi possono essere Scheme, e i vari dialetti ML di questo periodo.

Nello stesso periodo, venne formulata la valutazione pigra (lazy evaluation, call-by-need) grazie alla pubblicazione di alcuni saggi. In seguito, questo nuovo sistema di valutazione, venne implementato in LazyML, Clean, Daisy, Orwell.

Dalla metà degli anni ottanta, numerosi ricercatori richiedevano un linguaggio di programmazione puramente funzionale e basato sul concetto del call-by-need. Nel 1987, due dei principali fondatori del comitato per la creazione del nuovo linguaggio, Simon Peyton Jones e Paul Hudak, si incontrarono a Yale per proseguire verso la conferenza Functional Programming and Architecture Conference (FPAC).

Per gettare basi solide di un nuovo linguaggio standardizzato, i ricercatori riuniti al FPAC, decisero di partire da quello sviluppato da David Turner, Miranda che era già puramente funzionale e aveva una robusta implementazione. Ma Turner, visto che il linguaggio aveva già avuto una discreta diffusione, si rifiutò di separarlo in diversi dialetti. Malgrado questo fatto, Miranda, rimarrà la principale influenza di Haskell.

Il nuovo comitato venne formato a Yale nel 1988, il suo scopo fu di formulare un linguaggio che rispettasse principalmente le seguenti caratteristiche[3]:

  • Adatto all'insegnamento, alla ricerca, alle applicazioni e alla costruzione di grandi sistemi;
  • Completamente descritto attraverso la pubblicazione di una sintassi e semantica formale;
  • Gratuitamente disponibile;
  • Basato su idee con ampio consenso;
  • Ridurre la diversità nei linguaggi funzionali.

Dopo due anni, cioè il 1o aprile 1990, venne pubblicata la prima versione del linguaggio che verrà chiamata Haskell 1.0 in onore a Haskell Curry, e l'inizio della pubblicazione inizia proprio con una citazione del famoso matematico statunitense[4].

Dopo numerose versioni (1.1, 1.2, 1.3, 1.4) che si susseguirono tra il 1990 ed il 1998, c'era il bisogno di creare una versione stabile, considerato che i numerosi problemi che affliggevano il linguaggio, come quelli relativi all I/O, erano stati superati.

Nel 1998 fu pubblicato "The Haskell 98 Report: Language and Libraries"[3], che contiene la descrizione dello standard e di alcune librerie, il quale verrà ulteriormente revisionato da Simon Peyton Jones e ripubblicato nel 2002.

Nel 2006 fu creato il comitato Haskell Prime (Haskell')[5], il cui scopo è di produrre una revisione dello standard del 1998.

Nel 2009 è stata annunciata una nuova versione di Haskell chiamata Haskell 2010[6]. Le modifiche principali apportate furono la rimozione dell'n+k pattern e l'implementazione di numerose espressioni semplificate o anche chiamate zucchero sintattico (syntactic sugar), come la notazione do, le guards, l'espressione if then else.

Caratteristiche

[modifica | modifica wikitesto]

Tra le sue funzionalità Haskell presenta la valutazione pigra, le espressioni lambda, pattern matching, comprensione di lista, classi di tipi, e polimorfismo. è un linguaggio puramente funzionale, il che significa che le funzioni sono in genere pure, ovvero senza effetti collaterali. Esiste un costrutto diverso apposta per rappresentare gli effetti collaterali, ed è ortogonale alle funzioni. Una funzione pura può restituire un effetto collaterale che è successivamente eseguito, imitando così le funzioni impure degli altri linguaggi.

Haskell ha un sistema di tipi forte e statico, basato sull'inferenza di Hindley-Milner. La principale innovazione portata in questo campo sono le classi di tipi, concepite in origine come maniera di principio per introdurre il sovraccarico,[7] ma nel seguito usate in molti altri ambiti.[8]

Il costrutto che rappresenta gli effetti collaterali è un esempio di monade: un quadro generale che può modellizzare vari calcoli come la gestione degli errori, il nondeterminismo, l'analisi sintattica e la memoria transazionale. Sono definite come tipi di dato ordinari, ma Haskell fornisce un po' di zucchero sintattico per facilitarne l'uso.

Haskell ha una specifica aperta e pubblica e ne esistono numerose implementazioni. La principale, il Glasgow Haskell Compiler (GHC), è sia un interprete sia un compilatore di codice nativo e gira su molte piattaforme. GHC è noto per il suo ricco sistema di tipi che incorpora innovazioni recenti come i tipi di dati algebrici generalizzati e le famiglie di tipi. Il Computer Language Benchmarks Game ne evidenzia anche l'implementazione ad alte prestazioni della concorrenza e del parallelismo.[9]

Intorno al linguaggio esiste una comunità attiva e in crescita e più di 5.400 librerie e strumenti liberi di terze parti sono disponibili in rete nell'archivio di pacchetti Hackage.[10]

Codice di esempio

[modifica | modifica wikitesto]

Hello, world!

[modifica | modifica wikitesto]

Il seguente esempio stampa il testo "Hello World".

main = do
  putStrLn "Hello World!"

Una versione un po' più interattiva:

main :: IO ()
main = do
    putStr   "Scrivi il tuo nome:"
    nome     <- getLine
    putStrLn $ "Ciao " ++ nome

Calcolo del fattoriale

[modifica | modifica wikitesto]

Classica definizione del fattoriale con pattern matching:

fac :: Int -> Int
fac 0 = 1
fac n = n * fac (n-1)

Un'altra definizione più ristretta, utilizzando la funzione product:

fac' n = product [1.. n]

Calcolo della successione di Fibonacci

[modifica | modifica wikitesto]

Definizione con pattern matching per numeri naturali e applicazione di higher order functions:

fib   :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

La più efficiente implementazione, tuttavia, è questa[11]:

import Data.List
import Data.Bits
 
fib :: Int -> Integer
fib n = snd . foldl' fib' (1, 0) . dropWhile not $
            [testBit n k | k <- let s = finiteBitSize n in [s-1,s-2..0]]
    where
        fib' (f, g) p
            | p         = (f*(f+2*g), ss)
            | otherwise = (ss, g*(2*f-g))
            where ss = f*f+g*g

Un'altra possibile implementazione passa attraverso l'utilizzo della ricorsione in coda e l'applicazione parziale di una funzione:

-- Generica successione
addSeries :: Int -> Int -> Int -> Integer
addSeries a _ 0 = a
addSeries a b n = addSeries b (a + b) (n - 1)

-- Applicazione parziale della funzione addSeries
fib :: Int -> Integer
fib = addSeries 0 1 -- sono passati solo i termini iniziali della serie

Algoritmo di ordinamento generico quicksort

[modifica | modifica wikitesto]

Falsa[12] implementazione polimorfa con pattern matching e list comprehension :

qsort        :: Ord a => [a] -> [a]
qsort []     = []
qsort (x:xs) = qsort l1 ++ [x] ++ qsort l2
                where
                    l1 = [y | y <- xs, y<x]
                    l2 = [z | z <- xs, z>=x]

Crivello di Eratostene

[modifica | modifica wikitesto]
primes = dropall [2..] 
    where
        dropall (x:xs) = x:dropall(dropmul x xs) 
            where
                dropmul x l = [y | y <- l, y `mod` x /= 0]

Implementazioni

[modifica | modifica wikitesto]

Implementazioni obsolete

[modifica | modifica wikitesto]

Segue un elenco di implementazioni diventate ormai obsolete:

  • Hugs ( Hugs 98), o Haskell User's Gofer System, è un interprete bytecode portabile per numerose piattaforme. Grazie anche ad un'interfaccia grafica e alla modalità interattiva, costituisce un mezzo eccellente per apprendere il linguaggio Haskell. Da quando è stato creato GHCi, l'interprete interattivo di GHC, non viene più usato.
  • nhc98 ( nhc98 (archiviato dall'url originale il 5 febbraio 2005)), compilatore bytecode particolarmente adatto a macchine un po' datate grazie al ridotto uso di memoria.
  • yhc ( Neil Mitchell - Yhc (archiviato dall'url originale il 3 febbraio 2006)), o York Haskell Compiler, è un fork di nhc98 mirato ad aumentarne le performance e la portabilità.
  • jhc ( jhc) è un compilatore mirato a produrre codice ottimizzato il più possibile, ma allo stato attuale è da considerarsi sperimentale.

Alcune delle principali aziende in cui viene utilizzato Haskell:[14]

Tra le librerie per lo sviluppo lato server troviamo:

  • wai: Haskell Web Application Interface, un insieme di interfacce per lo sviluppo di applicazioni web;[15]
  • warp: un web server veloce e leggero per applicazioni che implementano le interfacce di wai;[16]
  • scotty: un framework web ispirato da Sinatra, pensato per essere semplice;[17]
  • spock: più leggero dei framework detti enterprise, ma avente più funzionalità di scotty;[18]
  • yesod: un framework enterprise per lo sviluppo di applicazioni web;[19]
  • snap: un altro framework enterprise;[20]
  • happstack-server: un altro framework enterprise;[21]
  • servant: una libreria che usa i tipi per definire le interfacce REST.[22]

Librerie grafiche e lo sviluppo di videogiochi:

  • apecs: una implementazione molto efficiente e type-driven;[23]
  • gelatin: una collezione di funzionalità grafiche che si basa su sdl, freetype e openGL;[24]
  • sdl2: package che fa da tramite con la libreria Simple DirectMedia Layer.[25]
  1. ^
    (inglese)
    ?We wanted a language that could be used, among other purposes, for research into language features;?
    (italiano)
    ?Noi volevamo un linguaggio che potesse essere usato, oltre agli altri scopi, per studiare le caratteristiche del linguaggio;?
  2. ^ Can Programming Be Liberated from Von Neumann Style? (PDF).
  3. ^ a b The Haskell 98 Language Report, su haskell.org. URL consultato il 30 gennaio 2016.
  4. ^ Report of the Programming Language Haskell A Non-Strict, Purely Functional Language, Version 1.0, su haskell.org, 1990.
  5. ^ Haskell Prime, su prime.haskell.org. URL consultato il 31 gennaio 2016 (archiviato dall'url originale il 20 febbraio 2016).
  6. ^ Simon Marlow, [Haskell] Announcing Haskell 2010, su mail.haskell.org, 24 novembre 2009. URL consultato il 30 gennaio 2016.
  7. ^ P. Wadler e S. Blott, How to make ad-hoc polymorphism less ad hoc, in Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '89, ACM, 1989, pp. 60-76, DOI:10.1145/75277.75283, ISBN 978-0-89791-294-5.
  8. ^ T. Hallgren, Fun with Functional Dependencies, or Types as Values in Static Computations in Haskell, in Proceedings of the Joint CS/CE Winter Meeting, Varberg, Sweden, gennaio 2001.
  9. ^ Computer Language Benchmarks Game.
  10. ^ HackageDB statistics, su hackage.haskell.org. URL consultato il 26 giugno 2013 (archiviato dall'url originale il 3 maggio 2013).
  11. ^ The Fibonacci sequence - HaskellWiki, su wiki.haskell.org. URL consultato il 31 gennaio 2016.
  12. ^ Why is the minimalist, example Haskell quicksort not a "true" quicksort?, su stackoverflow.com. URL consultato il 31 gennaio 2016.
  13. ^ Haskell GHC vs C++ g++ (64-bit Ubuntu quad core) | Computer Language Benchmarks Game, su benchmarksgame.alioth.debian.org. URL consultato il 30 gennaio 2016 (archiviato dall'url originale il 16 aprile 2016).
  14. ^ Haskell in industry - HaskellWiki, su wiki.haskell.org. URL consultato il 25 gennaio 2016.
  15. ^ Web Application Interface.
  16. ^ warp.
  17. ^ Scotty Tutorials & Examples.
  18. ^ spock.
  19. ^ Yesod.
  20. ^ snap-server.
  21. ^ Happstack.
  22. ^ Servant.
  23. ^ Apecs library, su github.com.
  24. ^ Gelatin library, su github.com.
  25. ^ SDL2, su hackage.haskell.org.
  • Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler, A history of Haskell: Being Lazy With Class, San Diego, CA, 2007.
  • Graham Hutton, Programming in Haskell, Cambridge University Press, 2007, pp.  170, ISBN 978-0-521-87172-3.

Voci correlate

[modifica | modifica wikitesto]

Concetti correlati

[modifica | modifica wikitesto]

Linguaggi correlati

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]

Libri di testo

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh93003496 · GND (DE4318275-6 · BNE (ESXX541061 (data) · BNF (FRcb12362303j (data) · J9U (ENHE987007561153805171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
宣字五行属什么 腹泻期间宜吃什么食物 热鸡蛋滚脸有什么作用 什么的朋友 雏形是什么意思
乙肝第二针最晚什么时候打 急性化脓性扁桃体炎吃什么药 祛火喝什么茶 性取向是什么意思 小孩儿咳嗽有什么妙招
谢邀什么意思 叫舅舅的是什么关系 videos是什么意思 脑部ct挂什么科 生化什么意思
法王是什么意思 空腔是什么意思 天珠有什么作用与功效 老头晕是什么原因引起的 尿颜色很黄是什么原因
平光眼镜是什么意思hcv9jop6ns0r.cn 李小龙是什么生肖gysmod.com 抑郁症是什么原因造成jingluanji.com 中国四大国粹是什么hcv9jop3ns9r.cn 马拉色菌毛囊炎用什么药治疗最好hcv9jop3ns9r.cn
医学五行属什么hcv8jop0ns4r.cn 杨梅是什么季节的水果aiwuzhiyu.com 性功能障碍挂什么科hcv8jop7ns0r.cn 会车是什么意思hcv8jop0ns6r.cn 吃维生素e软胶囊有什么好处hcv8jop9ns0r.cn
蛟龙是什么hcv8jop6ns2r.cn neu是什么意思hcv9jop3ns8r.cn 女性感染梅毒有什么症状luyiluode.com 高铁动车有什么区别hcv7jop6ns4r.cn 强迫思维是什么hcv8jop2ns6r.cn
三聚磷酸钠是什么东西hcv9jop6ns7r.cn 小孩测骨龄挂什么科jinxinzhichuang.com 水浒传什么朝代hcv7jop4ns7r.cn 籍贯一般填什么hcv8jop7ns7r.cn 小登科是什么意思wuhaiwuya.com
百度