﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-银色月光下-文章分类-编程语言</title><link>http://www.cppblog.com/lichking/category/20613.html</link><description>漫漫长夜</description><language>zh-cn</language><lastBuildDate>Thu, 05 Jun 2014 09:40:01 GMT</lastBuildDate><pubDate>Thu, 05 Jun 2014 09:40:01 GMT</pubDate><ttl>60</ttl><item><title>haskell 极简教程</title><link>http://www.cppblog.com/lichking/articles/202046.html</link><dc:creator>lichking</dc:creator><author>lichking</author><pubDate>Tue, 23 Jul 2013 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/lichking/articles/202046.html</guid><wfw:comment>http://www.cppblog.com/lichking/comments/202046.html</wfw:comment><comments>http://www.cppblog.com/lichking/articles/202046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lichking/comments/commentRss/202046.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lichking/services/trackbacks/202046.html</trackback:ping><description><![CDATA[<div><div>我希望这是一个haskell大纲和重点，目的是如果我很长时间没使用过HASKELL，那么跟随这个我能够很快找回陌生的概念（我过去学习过haskell的体会)，随着学习进程，这篇内容可以继续下去，丰富，变成一个对所有人都有用的教程。</div><div></div><div><span style="color: red;"><br />other reference:</span></div><div>------------------------------------</div><div><div><div>(http://www.haskell.org/wikiupload/b/b2/QuickReference.pdf)</div>(http://shuklan.com/haskell/lec01.html#/)//Introduction To Haskell;Lecture 1;An Unexpected Journey</div><div>(http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/)//Learn Haskell Fast and Hard</div>(http://cheatsheet.codeslower.com/CheatSheet.pdf)//</div><div></div><div></div><div><br /><span style="color: red;">haskell 的程序结构：</span></div><div>------------------------------------</div><div>--save as first.hs</div><div>{-</div><div>compile as: ghc --make first.hs -O2 -o first</div><div>run as: first</div><div>-}</div><div></div><div>module Main where</div><div></div><div>main = putStrLn "my first" &nbsp;</div><div><br /><span style="color: red;">模块：</span><br />------------------------------------</div><div></div><div><span style="white-space:pre">	</span>--use keyword</div><div><span style="white-space:pre">	</span>--import, module, qualified, as, hiding</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>import Data.List</div><div><span style="white-space:pre">	</span>import Data.List (sort)</div><div><span style="white-space:pre">	</span>import Data.List hiding (nub)</div><div><span style="white-space:pre">	</span>import qualified Data.Map --这样引用模块名，并带入名称限定，比如说可使用Data.Map.filter</div><div><span style="white-space:pre">	</span>import qualified Data.Map as M</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>module Geometry.Sphere &nbsp;</div><div><span style="white-space:pre">	</span>( volume &nbsp;</div><div><span style="white-space:pre">	</span>, area &nbsp;</div><div><span style="white-space:pre">	</span>) where</div><div></div><div><br /><span style="color: red;">语法：</span><br />--------------------------------------</div><div><span style="white-space:pre">	</span>缩进:</div><div><span style="white-space:pre">		</span>(http://en.wikibooks.org/wiki/Haskell/Indentation)</div><div><span style="white-space:pre">		</span>原则一点就是如果是语法结构的一部分进行缩进，同级的语法结构对齐</div><div><span style="white-space:pre">		</span>缩进可用 {} 替代，同级的结构可用 ;分开，这样可将语法写进一行</div><div></div><div><span style="white-space:pre">	</span>tips.1:&nbsp;</div><div><span style="white-space:pre">	</span>把中缀变成前缀 (==) 3 3</div><div><span style="white-space:pre">	</span>把前缀变成中缀 3 `mod` 2</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>tips.2:</div><div><span style="white-space:pre">	</span>可以这样使用匹配 --arr@(x:xs) --p@(a, b)</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre"><br /></span><span style="white-space: pre; color: red;">类型</span></div><div>---------------------------------------<span style="white-space:pre">	</span></div><div><span style="font-size: 14px;">基础类型：</span></div><div><span style="white-space:pre">	</span>Bool, Int, String</div><div>复合类型:</div><div><span style="white-space:pre">	</span>data MyBool = MFalse | MTrue</div><div><span style="white-space:pre">	</span>--:t MTrue</div><div><span style="white-space:pre">	</span>--MyBool::MyBool</div><div></div><div><span style="white-space:pre">	</span>data MyMayBe a = MJust a | MNothing</div><div><span style="white-space:pre">	</span>--:t MJust</div><div><span style="white-space:pre">	</span>--MJust::a-&gt;MyMayBe</div><div><span style="white-space:pre">	</span>(注， 这里myMayBe 叫做type constructor, 它的kind叫做*-&gt;*)</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>data M1 a b = M1{f1::a, f2::b}</div><div><span style="white-space:pre">	</span>--:t f1</div><div><span style="white-space:pre">	</span>--f1 :: M1 a b -&gt; a</div><div></div><div><span style="white-space:pre">	</span>newtype(http://www.haskell.org/haskellwiki/Newtype)</div><div><span style="white-space:pre">	</span>newtype 声明只有一个域(constructor or field)的data</div><div><span style="white-space:pre">	</span>newtype M1 a b = M1{f1::a, f2::b}</div><div><span style="white-space:pre">	</span>newtype State s a = State { runState :: s -&gt; (s, a) }</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>type 和 newtype区别<span style="white-space:pre">	</span>(http://www.haskell.org/haskellwiki/Type#Type_and_newtype)</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>newtype apply a b = a-&gt;b</div><div><span style="white-space:pre">		</span></div><div></div><div>定义MyPair:</div><div><span style="white-space:pre">	</span>data MyPair a b = MyPair {first::a, second::b}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span></div><div>可以定义MList:</div><div><span style="white-space:pre">	</span>data Mlist a = Mconst a (Mlist a) | Mnil</div><div><span style="white-space:pre">	</span>or)</div><div><span style="white-space:pre">	</span>data Mlist a = Mcons (MyPair a (Mlist a) ) | Mnil</div><div><span style="white-space:pre">	</span></div><div>可以定义MTuple</div><div><span style="white-space:pre">	</span>data MT a b c = MT {fa::a, fb::b, fc::c}</div><div></div><div>typeclass:</div><div><span style="white-space:pre">	</span>常用的typeclass 有 Read, Show, Eq, Ord, Fuctor, Monad...</div><div><span style="white-space:pre">	</span></div><div>instance Show (MyBool) where</div><div><span style="white-space:pre">	</span>show MTrue = "MTrue"</div><div><span style="white-space:pre">	</span>show MFalse = "MFalse"</div><div><span style="white-space:pre">	</span></div><div>instance Eq (MyBool) where</div><div><span style="white-space:pre">	</span>(==) MTrue MTrue = True</div><div><span style="white-space:pre">	</span>(==) MFalse MFalse = True</div><div><span style="white-space:pre">	</span>(==) _ _ = False</div><div></div><div><span style="white-space:pre">	</span></div><div><span style="color: red;">一些重要的typeclass</span><br />-----------------------------------</div><div><span style="font-size: 14px;">typeclass 可以继承</span></div><div>class &nbsp;(Eq a) =&gt; Ord a &nbsp;where</div><div>&nbsp; (&lt;), (&lt;=), (&gt;=), (&gt;) &nbsp;:: a -&gt; a -&gt; Bool</div><div>&nbsp; max, min &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:: a -&gt; a -&gt; a</div><div></div><div>不是所有接口都需要实现 <span style="white-space:pre">	</span> &nbsp;&nbsp;</div><div>"Each type class defines a certain set of methods which need to be implemented; Eq requires == or /=, and Ord requires &lt;= or compare."</div><div>(http://stackoverflow.com/questions/3065954/defining-your-own-ord-for-a-data-type-haskell)</div><div></div><div>理解 Ord</div><div>class (Eq a)=&gt;(Ord a) where</div><div><span style="white-space:pre">	</span>(&lt;=)::a-&gt;a-&gt;Bool</div><div><span style="white-space:pre">	</span></div><div>instance Ord (MyBool) where</div><div><span style="white-space:pre">	</span>(&lt;=) MTrue MFalse = False</div><div><span style="white-space:pre">	</span>(&lt;=) _ _ = True</div><div></div><div>理解functor:</div><div>class Functor functor where</div><div><span style="white-space:pre">	</span>fmap::(a-&gt;b)-&gt;(functor a)-&gt;(functor b)</div><div></div><div>理解applicative:</div><div>class (Functor app)=&gt;Applicative app where:</div><div><span style="white-space:pre">	</span>pure::a-&gt;(app a)</div><div><span style="white-space:pre">	</span>&lt;*&gt; :: (app (a-&gt;b))-&gt;(app a)-&gt;(app b)</div><div><span style="white-space:pre">	</span>($) ::(a-&gt;b)-&gt;(app a)-&gt;(app b)</div><div></div><div></div><div></div><div><span style="color: #ff0000;"><br />IO</span><br />-----------------------------------<br /><a href="http://book.realworldhaskell.org/read/io.html">http://book.realworldhaskell.org/read/io.html</a><br /><br /><span style="color: red;">ghci 的一些使用小技巧</span><br />-----------------------------------</div><div>&nbsp; &nbsp; &nbsp; &nbsp; :t :q :m :load<br />&nbsp; &nbsp; &nbsp; &nbsp; ghci xxx.hs</div><div><span style="white-space:pre">	</span>可以换行:</div><div><span style="white-space:pre">		</span>:{--后起一行</div><div><span style="white-space:pre">		</span>xxxxx</div><div><span style="white-space:pre">		</span>:}</div><div><span style="white-space: pre;">	</span></div><div><span style="white-space:pre">	</span>因为每个 action 都是一个IO a 所以，可以使用do notation</div><div><span style="white-space:pre">	</span>例：</div><div><span style="white-space:pre">		</span>let f=xxx; let b=xxx; return f b</div><div><span style="white-space:pre">		</span>a&lt;-getLine&nbsp;</div><div><span style="font-size: 14px;">-----------------------------------</span><span style="font-size: 14px; white-space: pre;">	</span></div><div></div></div><img src ="http://www.cppblog.com/lichking/aggbug/202046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lichking/" target="_blank">lichking</a> 2013-07-23 11:25 <a href="http://www.cppblog.com/lichking/articles/202046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多语言实现的一个算法</title><link>http://www.cppblog.com/lichking/articles/201600.html</link><dc:creator>lichking</dc:creator><author>lichking</author><pubDate>Sun, 07 Jul 2013 16:50:00 GMT</pubDate><guid>http://www.cppblog.com/lichking/articles/201600.html</guid><wfw:comment>http://www.cppblog.com/lichking/comments/201600.html</wfw:comment><comments>http://www.cppblog.com/lichking/articles/201600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lichking/comments/commentRss/201600.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lichking/services/trackbacks/201600.html</trackback:ping><description><![CDATA[<a href="http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95" title="埃拉托斯特尼筛法" style="color: #444444; text-decoration: none; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">埃拉托斯特尼<span style="color: red;">筛法</span></a><span style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">&nbsp;的思想是，我们将</span><span style="font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff; color: red;">自然数集合</span><span style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">如果按照素数的顺序进行"筛&#8220;(去掉含</span><span style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">素数因子</span><span style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">的数)，那么得到的是</span><span style="font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff; color: red;">素数集合，</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">它在算法上就是, 准备一个从2开始的素数集合，筛自然数，之后每得个素数，放入集合里作为筛选因子，</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><span style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;">以下是各语言该算法的实现，排名按代码长短</span><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><div style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 15.199999809265137px; background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 1239.300048828125px; word-break: break-all;"><strong style="color: #ff0000;">&nbsp;//java:</strong><strong><span style="color: #ff0000;"><br /></span></strong><br /><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">public</span>&nbsp;<span style="color: #0000ff;">class</span>&nbsp;main&nbsp;{<br /><span style="color: #008080;">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span>&nbsp;<span style="color: #0000ff;">static</span>&nbsp;<span style="color: #0000ff;">class</span>&nbsp;PGen{<br /><span style="color: #008080;">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Integer&gt;&nbsp;mList&nbsp;=&nbsp;<span style="color: #0000ff;">new</span>&nbsp;ArrayList&lt;Integer&gt;();<br /><span style="color: #008080;">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;mTestInt;<br /><span style="color: #008080;">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080;">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mList.add(2);mList.add(3);<br /><span style="color: #008080;">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTestInt&nbsp;=&nbsp;5;<br /><span style="color: #008080;">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080;">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span>&nbsp;Boolean&nbsp;iter(){<br /><span style="color: #008080;">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;lim&nbsp;=&nbsp;(<span style="color: #0000ff;">int</span>)Math.floor(Math.sqrt(mTestInt)&nbsp;);<br /><span style="color: #008080;">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>(Integer&nbsp;p:mList){<br /><span style="color: #008080;">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(mTestInt%p&nbsp;==&nbsp;0)<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">false</span>;<br /><span style="color: #008080;">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(p&gt;lim)<span style="color: #0000ff;">break</span>;<br /><span style="color: #008080;">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">true</span>;<br /><span style="color: #008080;">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080;">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span>&nbsp;Integer&nbsp;next(){<br /><span style="color: #008080;">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>(;!iter();mTestInt=mTestInt+2&nbsp;){}<br /><span style="color: #008080;">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mList.add(mTestInt);mTestInt+=2;<br /><span style="color: #008080;">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;mTestInt;<br /><span style="color: #008080;">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080;">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span>&nbsp;idx(<span style="color: #0000ff;">int</span>&nbsp;i){<br /><span style="color: #008080;">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">while</span>(mList.size()&lt;=i){<br /><span style="color: #008080;">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next();<br /><span style="color: #008080;">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;mTestInt;<br /><span style="color: #008080;">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080;">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span>&nbsp;Show(<span style="color: #0000ff;">int</span>&nbsp;i){<br /><span style="color: #008080;">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx(i);<br /><span style="color: #008080;">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>(Integer&nbsp;p:mList){<br /><span style="color: #008080;">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(p);<br /><span style="color: #008080;">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span>&nbsp;<span style="color: #0000ff;">static</span>&nbsp;<span style="color: #0000ff;">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br /><span style="color: #008080;">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PGen&nbsp;pl&nbsp;=&nbsp;<span style="color: #0000ff;">new</span>&nbsp;PGen();<br /><span style="color: #008080;">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pl.Show(100);<br /><span style="color: #008080;">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">44</span>&nbsp;}</div><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><div style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 15.199999809265137px; padding: 4px 5px 4px 4px; background-color: #eeeeee; border: 1px solid #cccccc; width: 1251.6500244140625px; word-break: break-all;"><strong>&nbsp;<span style="color: red;">//</span><span style="color: red;">C++:<br /></span></strong><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<br /><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #0000ff;">struct</span>&nbsp;st_p{<br /><span style="color: #008080;">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::vector&lt;<span style="color: #0000ff;">int</span>&gt;&nbsp;m_p;<br /><span style="color: #008080;">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_p&amp;&nbsp;init(){m_p.push_back(2);m_p.push_back(3);&nbsp;<span style="color: #0000ff;">return</span>&nbsp;*<span style="color: #0000ff;">this</span>;}<br /><span style="color: #008080;">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_p&amp;&nbsp;gen_n(<span style="color: #0000ff;">int</span>&nbsp;n){<br /><span style="color: #008080;">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">int</span>&nbsp;i&nbsp;=&nbsp;5;&nbsp;m_p.size()!=n;&nbsp;i=i+2){<br /><span style="color: #008080;">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(is_p(i)&nbsp;)<br /><span style="color: #008080;">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_p.push_back(i);<br /><span style="color: #008080;">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;*<span style="color: #0000ff;">this</span>;<br /><span style="color: #008080;">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">bool</span>&nbsp;is_p(<span style="color: #0000ff;">int</span>&nbsp;n){<br /><span style="color: #008080;">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span>&nbsp;l&nbsp;=&nbsp;sqrt(n)+1;<br /><span style="color: #008080;">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&lt;m_p.size();&nbsp;++i){<br /><span style="color: #008080;">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span>&nbsp;p&nbsp;=&nbsp;m_p[i];<br /><span style="color: #008080;">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(p&gt;l)&nbsp;<span style="color: #0000ff;">break</span>;<br /><span style="color: #008080;">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(n%p&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">false</span>;<br /><span style="color: #008080;">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">true</span>;<br /><span style="color: #008080;">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_p&amp;&nbsp;show(){<br /><span style="color: #008080;">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>(auto&nbsp;v:m_p){<br /><span style="color: #008080;">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d,&nbsp;",&nbsp;v);<br /><span style="color: #008080;">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;*<span style="color: #0000ff;">this</span>;<br /><span style="color: #008080;">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">28</span>&nbsp;};<br /><span style="color: #008080;">29</span>&nbsp;<span style="color: #0000ff;">int</span>&nbsp;_tmain(<span style="color: #0000ff;">int</span>&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[]){<br /><span style="color: #008080;">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_p().init().gen_n(20).show();<span style="color: #0000ff;">return</span>&nbsp;0;<br /><span style="color: #008080;">32</span>&nbsp;}</div><br /><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><div style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 15.199999809265137px; background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 1239.300048828125px; word-break: break-all;"><strong>&nbsp;<span style="color: #ff0000;">--&nbsp;</span><span style="color: #ff0000;">lua:<br /></span></strong><br /><span style="color: #008080;">&nbsp;2</span>&nbsp;<br /><span style="color: #008080;">&nbsp;3</span>&nbsp;plist&nbsp;=&nbsp;{2}<br /><span style="color: #008080;">&nbsp;4</span>&nbsp;<br /><span style="color: #008080;">&nbsp;5</span>&nbsp;isP&nbsp;=&nbsp;<span style="color: #0000ff;">function</span>(n)<br /><span style="color: #008080;">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lim&nbsp;=&nbsp;math.floor(math.sqrt(n)&nbsp;)<br /><span style="color: #008080;">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span>&nbsp;_,&nbsp;p&nbsp;<span style="color: #0000ff;">in</span>&nbsp;ipairs(plist)&nbsp;<span style="color: #0000ff;">do</span><br /><span style="color: #008080;">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>&nbsp;n%p&nbsp;==&nbsp;0&nbsp;<span style="color: #0000ff;">then</span>&nbsp;<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">false</span>&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>&nbsp;p&gt;lim&nbsp;<span style="color: #0000ff;">then</span>&nbsp;<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">true</span>&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;<span style="color: #0000ff;">true</span>;<br /><span style="color: #008080;">12</span>&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">13</span>&nbsp;<br /><span style="color: #008080;">14</span>&nbsp;<span style="color: #0000ff;">function</span>&nbsp;pgen()<br /><span style="color: #008080;">15</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span>&nbsp;coroutine.wrap(<span style="color: #0000ff;">function</span>&nbsp;()<br /><span style="color: #008080;">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;3<br /><span style="color: #008080;">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">while</span>&nbsp;<span style="color: #0000ff;">true</span>&nbsp;<span style="color: #0000ff;">do</span><br /><span style="color: #008080;">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>&nbsp;isP(n)&nbsp;<span style="color: #0000ff;">then</span>&nbsp;table.insert(plist,&nbsp;n);coroutine.yield(n);&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;n+2<br /><span style="color: #008080;">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">21</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">end</span>)<br /><span style="color: #008080;">22</span>&nbsp;<span style="color: #0000ff;">end</span><br /><span style="color: #008080;">23</span>&nbsp;k&nbsp;=&nbsp;pgen()<br /><span style="color: #008080;">24</span>&nbsp;<span style="color: #0000ff;">for</span>&nbsp;i&nbsp;=&nbsp;0,&nbsp;100&nbsp;<span style="color: #0000ff;">do</span>&nbsp;<span style="color: #0000ff;">print</span>&nbsp;(k()&nbsp;)&nbsp;<span style="color: #0000ff;">end</span></div><br /><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><div style="color: #333333; font-family: verdana, sans-serif; font-size: 13px; line-height: 15.199999809265137px; background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 1239.300048828125px; word-break: break-all;"><strong>&nbsp;</strong><strong style="color: #ff0000;">//scala:<br /></strong><span style="color: #008080;">&nbsp;2</span>&nbsp;<br /><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">import</span>&nbsp;scala.collection.immutable.Stream<br /><span style="color: #008080;">&nbsp;3</span>&nbsp;<br /><span style="color: #008080;">&nbsp;4</span>&nbsp;object&nbsp;Sieve&nbsp;extends&nbsp;Application&nbsp;{<br /><span style="color: #008080;">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;prims&nbsp;=&nbsp;Stream.cons(2,&nbsp;checkfrom(3));<br /><span style="color: #008080;">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080;">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">def</span>&nbsp;checkfrom(n:&nbsp;Int):Stream[Int]&nbsp;={<br /><span style="color: #008080;">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;testps&nbsp;=&nbsp;prims.takeWhile(_&nbsp;&lt;=&nbsp;math.floor(math.sqrt(n)).toInt);<br /><span style="color: #008080;">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;res&nbsp;=&nbsp;testps.foldLeft(true){(acc,&nbsp;e)=&gt;(n%e&nbsp;!=&nbsp;0)&amp;&amp;acc}<br /><span style="color: #008080;">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(res)&nbsp;Stream.cons(n,&nbsp;checkfrom(n+2)&nbsp;)<br /><span style="color: #008080;">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span>&nbsp;checkfrom(n+2);<br /><span style="color: #008080;">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080;">13</span>&nbsp;<br /><span style="color: #008080;">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(prims.take(100).toList)<br /><span style="color: #008080;">15</span>&nbsp;};</div><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><br style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;" /><div style="color: #333333; font-family: verdana, sans-serif; font-size: 12.800000190734863px; line-height: 15.199999809265137px; background-color: #ffffff;"><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 1239.300048828125px; word-break: break-all;"><span style="color: #008080;">1</span>&nbsp;<span style="color: red;">--</span><strong style="color: red;">haskell:<br /><br /></strong><span style="color: #008080;">2</span>&nbsp;prims&nbsp;=&nbsp;2:(checkfrom&nbsp;3)<br /><span style="color: #008080;">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;checkfrom&nbsp;iter&nbsp;=<br /><span style="color: #008080;">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;pc&nbsp;=&nbsp;floor.sqrt.fromInteger&nbsp;$&nbsp;iter<br /><span style="color: #008080;">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">in</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>&nbsp;<span style="color: #0000ff;">and</span>&nbsp;$&nbsp;map&nbsp;((/=0).(mod&nbsp;iter)&nbsp;)&nbsp;(take&nbsp;pc&nbsp;plist1)<br /><span style="color: #008080;">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;iter:(checkfrom&nbsp;(iter+2)&nbsp;)<br /><span style="color: #008080;">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span>&nbsp;(checkfrom&nbsp;(iter+2)&nbsp;)<br /><span style="color: #008080;">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080;">9</span>&nbsp;main&nbsp;=&nbsp;putStrLn&nbsp;$&nbsp;show&nbsp;$&nbsp;take&nbsp;100&nbsp;prims</div><br /><br />可以看到：<br />1. java和c++表达是相似的，你可以精确地表达算法<br />2. lua和python 是相似的，用到了内置数据结构和生成器<br />3. scala和 haskell是相似的，lambda, lazy list<br />4. 表达能力强的语言可以实现较弱语言的表达(废话)，反之不然</div><img src ="http://www.cppblog.com/lichking/aggbug/201600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lichking/" target="_blank">lichking</a> 2013-07-08 00:50 <a href="http://www.cppblog.com/lichking/articles/201600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c_toy介绍</title><link>http://www.cppblog.com/lichking/articles/166088.html</link><dc:creator>lichking</dc:creator><author>lichking</author><pubDate>Mon, 20 Feb 2012 12:00:00 GMT</pubDate><guid>http://www.cppblog.com/lichking/articles/166088.html</guid><wfw:comment>http://www.cppblog.com/lichking/comments/166088.html</wfw:comment><comments>http://www.cppblog.com/lichking/articles/166088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lichking/comments/commentRss/166088.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lichking/services/trackbacks/166088.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: c_toy, 是一个以 c语法为借鉴的 动态类型 脚本语言，集成了部分流行脚本语言的特性，虽然之前有做过一些不同的，语法解析, 虚拟机，但都半途而废，我需要把我对动态语言的理解，付诸实现.&nbsp;作为动态语言，它看起来更像是 javascript, 但不管是 javascript, c_toy, 你们都得管c 喊爹！1. 基本语句&nbsp;print = std.sys....&nbsp;&nbsp;<a href='http://www.cppblog.com/lichking/articles/166088.html'>阅读全文</a><img src ="http://www.cppblog.com/lichking/aggbug/166088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lichking/" target="_blank">lichking</a> 2012-02-20 20:00 <a href="http://www.cppblog.com/lichking/articles/166088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>