[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