[python-users] Transpiler
Dirk Hünniger
dirk.hunniger at googlemail.com
Sa Feb 15 21:06:34 CET 2014
Hallo
On 09.02.2014 18:22, Christopher Arndt wrote:
> Mit Cython bekomme ich ähnliche Ergebnisse (und muss auch nur zwei
> Typdeklarationen hinzufügen):
>
>
ich verstehe im Moment noch nicht warum man überhaupt typendeklarationen
braucht. Ich habe mal hier imperativ und seiteneffektbasiert als while
iteration die Fakultätsberechnung programmiert und eine völlig
überflüssige Rekursion eingebaut um den Compiler zu provozieren. Aber
hier ging es dann auch ganz ohne Typendeklatation aber mit statischer
Typenprüfung.Ist allerdings wie immer Haskell.
Viele Grüße Dirk
import Data.IORef
main= ffak 3>>= print
while b a = b>>= \bb->if bb then a >> while b a else return ()
ffak n = do i<-newIORef 1
out<-newIORef 1
while (readIORef i >>=(\ii-> return (ii<=n))) ( do
ii<-readIORef i
modifyIORef out (*ii)
print ii
if n==1
then return 1 else ffak (n-1)
modifyIORef i (+1) )
readIORef out
Und hier noch mal die eine Version mit echter Verwendung einer Rekursion.
instance (Num a) => Num (IO a) where
a * b = do x<-a
y<-b
return (x*y)
a + b = do x<-a
y<-b
return (x+y)
a - b = do x<-a
y<-b
return (x-y)
negate a = do x<-a
return (negate x)
abs a = do x<-a
return (abs x)
signum a = do x<-a
return (signum x)
fromInteger i = return (fromInteger i)
fak 1 = print "one">>return 1
fak n = print n >> (return n)*fak (n-1)
main= fak 3>>= print
Mehr Informationen über die Mailingliste python-users