1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Haskell auf dem Mac OS X Snow Leopard nutzen

Dieses Thema im Forum "Andere Software" wurde erstellt von The_Deathmaster, 03.03.10.

  1. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    Hallo,
    ich bin auf dem Gymnasium im 2. Semester Informatik und wir nehmen grade Haskell durch. Dort sind natürlich mal wieder alles Windows-Computer. Ich wollte aber gerne auch mal das, was wir in der Schule machen, zu Hause ausprobieren und weiterführen. In der Schule nutzen wir WinHugs zum ausführen und Notepad++ zum schreiben. Meine Frage ist jetzt, ob es so eine einfache Möglichkeit auch für den Mac OS X Snow Leopard gibt. Ich hab natürlich schon ein bisschen geguckt, was es da so gibt; allerdings war das immer relativ kompliziert. Gibt es nicht irgendwie sowas einfaches, wo man einfach zwei oder besser nur ein Programm aufmacht und das dann nutzt? Ich brauch ja wirklich nicht viel, es geht ja NUR um GANZ EINFACHE Funktionen mit "Ist der Punkt im Kreis? True/False" und so etwas. Ich meine, es kann doch nicht sein, dass auf dem Windows was einfacher ist als auf dem Mac (Okok da gibts einiges. Aber hier auch noch? Das ist doch nur eine Programmiersprache... Und jetzt bitte keine Kommentare wie "NUR eine Programmiersprache?!?" usw.). Gibt es nicht so ein Programm wie WinHugs für den Mac?!? Ich weiß, man kann es auch für Mac runterladen, allerdings muss ich dann auch ne Menge anderer Schritte machen...
    Ich bin übrigens nur im 2. Semester, weil mir der Rest zu einfach war und ich deswegen kein Informatik gewählt hab. Ich hab also einige Ahnung, nur bin ich kein Programmierer.
    Bitte um Antworten... Und bitte nichts wo ich andere Dateien umschreiben muss usw....
    Danke!
     
  2. MacAlzenau

    MacAlzenau Golden Noble

    Dabei seit:
    26.12.05
    Beiträge:
    19.396
    Ich kenn mich da zwar überhaupt nicht aus, aber was lernt man an der Schule in Informatik, wenn man dann nicht wenigstens ein klein bißchen Programmieren kann?
    http://hackage.haskell.org/platform/ scheint mir ein Paket zu bieten, an dem man nichts umschreiben muß - immerhin gleich als dmg gepaxkt -, aber das hast du dir sicher schon angeschaut. Aber normalerweise muß man auch bei der Installation über MacPorts bzw. Darwinports nichts "umschreiben", läuft dann halt eventuell übers Terminal oder über die win-ähnlich hässliche X11-Oberfläche.
     
  3. Cuthbert87

    Cuthbert87 Granny Smith

    Dabei seit:
    12.12.08
    Beiträge:
    17
    Natürlich gibt's das für den Mac!
    Hugs ist ein Comandline-Tool, wenn Du es auf einem Unix System verwenden möchtest, und entsprechend musst Du dich wohl oder übel mit den Terminal auseinander setzen müssen. (Als Informatiker führt eh kein Weg an einem Terminal vorbei.)

    Um das alles etwas einfacher zu gestallten solltest Du Dir zuerst einmal MacPorts installieren.
    Den Download und die Anleitung hierzu findest Du hier: macports.org
    Über MacPorts kannst Du dann Hugs installieren. Hierzu finden sich dann auch wirklich x Anleitungen, die Du einfach nur stupide 1 zu 1 antippen brauchst, also keine Angst ;)
    Hab's mit dieser damals installiert: haskell.org
    Die Zauberworte lauten:
    Code:
    sudo port install hugs98
    Hast du Hugs dann einmal installiert kannst Du es über das Terminal einfach mit der Eingabe
    Code:
    hugs
    starten.
    Der Rest ist dann einfach nur noch mit den Programm spielen.

    Ach ja, als Editor kannst Du natürlich ebenfalls übers Terminal VIM verwenden oder den normalen Texteditor, im Grunde brauch der Editor ja nix können.

    Grüzze

    Bert

    EDIT: Too late...
     
    #3 Cuthbert87, 03.03.10
    Zuletzt bearbeitet: 03.03.10
  4. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    Ich bin im Informatikunterricht, um programmieren zu LERNEN. Außerdem wird Informatik in der Schule nicht als programmieren definiert, sondern eher als EDV. Mit programmieren fängt man erst in der Oberstufe an, wo ich ja jetzt bin.

    @Bert: Danke für die Antwort, werde es gleich ausprobieren!
    Ach ja, warum wir Notepad++ benutzen, ist, dass es erkennt, was bei einer Haskell-Programmierung Befehl ist usw. und das wird dann alles dementsprechend gefärbt. das erleichtert die Sache nur geringfügig, sieht aber schöner aus... Ist aber nicht so wichtig.
     
  5. MacAlzenau

    MacAlzenau Golden Noble

    Dabei seit:
    26.12.05
    Beiträge:
    19.396
    Und um Programmieren zu lernen, braucht man eine Programmiersprache und eine Umgebung - die willst du dir ja runterladen. Und bei nichts, was man per Google auf den ersten paar Einträgen findet, man was groß was umschreiben und so. Du wirst doch auf deinem Mac ein Programm installieren oder ein paar Zeilen fürs Terminal aus einer Anweisung abtippen können?
     
  6. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    Also, ich hab jetzt macports installiert und den rest runtergeladen. die beiden packages GHC-6.10.4-i386.pkg und haskell-platform-2009.2.0.2.pkg liegen jetzt auf meinem desktop. wenn ich versuche, eins der beiden zu installieren, kommt bei ghc der fehler, dass ich nach zustimmung zu der lizenz nicht auf installieren klicken kann, und bei der platform stoppt die installation kurz vor dem ende mit dem kommentar fehler und dass ich mich an den hersteller der software wenden soll, also nicht sehr aufschlussreich. ich habe fast 40GB platz auf meinem mac, und alle software ist auf dem neuesten stand. ach ja: ich habe natürlich auch übers terminal macports genutzt (macports nutzen macht man doch einfach, indem mans installiert und dann ganz normal das terminal nutzen oder? ich hab keine andere möglichkeit gesehen...). ich hab auch schon geselfupdated. aber wenn ich versuche, sudo port hugs98 install einzugeben, kommt die meldung, dass die action hugs98 Unrecognized ist (xxx-iMac:~ xxx$ sudo port hugs98 install
    Unrecognized action "hugs98"). hab ich irgendwas falsch gemacht? wahrscheinlich. aber was?
    wahrscheinlich bin ich einfach nur zu blöd...

    EDIT: Ich habs mal mit sudo port install hugs98 probiert, und siehe da, er fängt an zu arbeiten. aber nach einer kurzen weile kommt:

    xxx-iMac:~ xxx$ sudo port install hugs98
    ---> Computing dependencies for hugs98
    ---> Configuring ncursesw
    Error: Target org.macports.configure returned: configure failure: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_ncursesw/work/ncurses-5.7" && ./configure --prefix=/opt/local --enable-widec --disable-rpath --with-shared --without-debug --without-ada --enable-sigwinch --mandir=/opt/local/share/man --with-manpage-format=normal " returned error 77
    Command output: checking for egrep... grep -E
    Configuring NCURSES 5.7 ABI 5 (Wed Mar 3 21:58:56 CET 2010)
    checking build system type... i386-apple-darwin10.2.0
    checking host system type... i386-apple-darwin10.2.0
    checking target system type... i386-apple-darwin10.2.0
    Configuring for darwin10.2.0
    checking for prefix... /opt/local
    checking for gcc... /usr/bin/gcc-4.2
    checking for C compiler default output... configure: error: C compiler cannot create executables

    Error: The following dependencies failed to build: readline ncurses ncursesw
    Error: Status 1 encountered during processing.
    Before reporting a bug, first run the command again with the -d flag to get complete output.

    der -d-befehl hat nichts geändert, noch nicht mal am output.


    EDIT: Ich hab nach einigen Recherchen rausgefunden, dass man XCode dafür haben muss. Das wusste ich zwar schon vorher, aber das hat mich auf folgenden Schritt gebracht: Ich habe XCode einfach mal gestartet. Und siehe da, es lässt sich nicht öffnen. Laut dem Fehlerbericht liegt es einer Library-Datei, die er nicht öffnen kann. Die habe ich gefunden und übers Terminal geöffnet, und: Es liegt ein Fehler vor. Mein Schritt ist jetzt, einfach die neueste Version runterzuladen; vielleicht funzt das ja.
     
    #6 The_Deathmaster, 03.03.10
    Zuletzt bearbeitet: 03.03.10
  7. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    Ich habe jetzt das neueste XCode installiert, und siehe da, die Installierung von sowohl hugs98 als auch vom compiler und der platform funktionieren. hugs98 braucht nur eine sehr viel längere weile. Und siehe da: ganz am ende kommt wieder eine Fehlermeldung. ich geh schlafen, mach morgen weiter. bin depri -.-
     
  8. Cuthbert87

    Cuthbert87 Granny Smith

    Dabei seit:
    12.12.08
    Beiträge:
    17
    Ich glaub Du hast einfach 'nen schlechten Tag erwischt ;)

    Das XCode benötigt wird, liegt daran, dass für die Installation auf den über XCode installierten C Compiler zugegriffen wird.

    Bevor Du morgen neu anfängst solltest Du einmal alle "temporäre" und defekte Packete, die mit einer Installation erstellt wurde entfernen.
    Das geht mit dem Befehl:
    Code:
    sudo port clean --all installed
    Wenn Du noch fix den Fehler posten kannst, schau ich mal, ob ich weiß woran's liegen kann.

    Ansonsten viel Erfolg noch
     
  9. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    Nach der entfernung der dateien hab ichs nochmal versucht und raus kommt ziemlich schnell das hier:


    xxx-iMac:~ xxx$ sudo port install hugs98
    ---> Computing dependencies for hugs98
    ---> Building hugs98
    Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_hugs98/work/hugs98-plus-Sep2006" && /usr/bin/make -j2 all " returned error 2
    Command output: cd src; /usr/bin/make all
    make[1]: Nothing to be done for `all'.
    cd libraries; /usr/bin/make all
    cd ../cpphs; HUGSFLAGS=-P../libraries/bootlib HUGSDIR=../hugsdir ../src/runhugs -98 ../packages/Cabal/examples/hapax.hs configure --verbose --hugs --prefix='/opt/local' --scratchdir='../hugsdir/packages/cpphs' --with-compiler=../src/ffihugs
    runhugs: Error occurred
    ERROR "../libraries/bootlib/System/Posix/Internals.hs" - Error while importing DLL "../libraries/bootlib/System/Posix/Internals.so":
    dlopen(../libraries/bootlib/System/Posix/Internals.so, 9): image not found



    make[1]: *** [../hugsdir/programs/cpphs/Main.hs] Error 1
    make: *** [all] Error 2

    Error: Status 1 encountered during processing.
    Before reporting a bug, first run the command again with the -d flag to get complete output.


    Auch das -d ändert nichts daran. Ich kanns zwar nicht genau sagen, sieht aber aus wie gestern.
     
  10. royper

    royper Gloster

    Dabei seit:
    07.07.08
    Beiträge:
    64
    Nebenbei bemerkt:
    Ich hab dieses Semester in der Uni auch Haskell lernen müssen und fand im Vergleich zu HUGS den Glasgow Haskell Compiler (Download hier) deutlich komfortabler und auch einfacher zu installieren: GHC braucht nur das "Unix Development Support"-Packet, was du über den Xcode 3.x-Installer installieren kannst. Falls du unbedingt eine Interpreter haben willst, das kann GHC auch: einfach mit "ghci" im Terminal starten.
    Die Programme geschrieben habe ich mit Smultron (besitzt Syntax-Highlighting für Haskell).

    Wie gesagt: Das hat mir in der Uni mehr als ausgereicht und der GHC war von der Geschwindigkeit imho/meinem Gefühl nach schneller als HUGS.

    EDIT: Für Smultron auf SL brauchst die aktuelle (leider nur) Beta-Version: http://smultron.sourceforge.net/
     
  11. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    ich BENUTZE den Haskell Glasgow Compiler
     
  12. royper

    royper Gloster

    Dabei seit:
    07.07.08
    Beiträge:
    64
    Dann weiß ich ehrlich gesagt nicht, wo/was dein Problem ist und was du mit HUGS machen möchtest, wenn nicht, deine .hs-Files zu compilieren/interpretieren, und das macht GHC bzw. GHCi imho sogar besser als HUGs.

    Zwei Programme: Texteditor deiner Wahl (mit syntax-highlighting) & ghci im Terminal.
    Macht alles was du brauchst in Haskell und ist einfach in der Installation (GHC hast du ja schon).
    Benutze GHC also im sog. interaktiven Modus, funktioniert dann genauso wie HUGS. Einfach mit
    Code:
    $ ghci
    im Terminal starten (am besten schon im Verzeichnis sein, wo deine Haskell-Skripte liegen, aber kannst auch im ghci dorthin navigieren).

    Beispiel von mir zur Benutzung von ghci:
    Code:
    $ cd ./Übungen/
    $ ghci
    GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer ... linking ... done.
    Loading package base ... linking ... done.
    Prelude> 34251369123 `mod` 153
    102
    Prelude> :load uebung8.hs
    [1 of 1] Compiling Main             ( uebung8.hs, interpreted )
    Ok, modules loaded: Main.
    *Main> fibList 20
    Loading package syb ... linking ... done.
    Loading package array-0.2.0.0 ... linking ... done.
    Loading package filepath-1.1.0.2 ... linking ... done.
    Loading package old-locale-1.0.0.1 ... linking ... done.
    Loading package old-time-1.0.0.2 ... linking ... done.
    Loading package unix-2.3.2.0 ... linking ... done.
    Loading package directory-1.0.0.3 ... linking ... done.
    Loading package process-1.0.1.1 ... linking ... done.
    Loading package random-1.0.0.1 ... linking ... done.
    Loading package haskell98 ... linking ... done.
    [10946,6765,4181,2584,1597,987,610,377,233,144,89,55,34,21,13,8,5,3,2,1,1]
    *Main> :q
    Leaving GHCi.
    Die Skripte hab ich wie gesagt mit Smultron geschrieben, der syntax-highlighting für Haskell (und tausend anderer Sprachen) unterstützt.
    Sollte dann imho ziemlich genau das sein, was du dir wünschst.
    Hoffe geholfen zu haben.
     
    #12 royper, 07.03.10
    Zuletzt bearbeitet: 07.03.10
  13. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    ahh, jetzt hab ichs, vielen vielen dank. scheint zu funktionieren. nur eine sache noch: wie lade ich dateien?!? du schreibst ja :load xxx. Meine Datei heißt Aufgabe 1 (ohne Dateiendung, warum auch immer, vlt weil Smultron Dokument? Muss ich Smultron schließen, damit eine Dateiendung kommt?). Muss das ohne Leerzeichen oder so geschrieben werden?
    Meine Datei befindet sich in /Users/xxx/Desktop/Schule/Informatik/Aufgabe1.hs. Ich hab schon eine MEnge ausprobiert, aber geholfen hat anscheinend nichts.
    Egal was ich mache, die unknown Type signature kriege ich net raus.
    Ich habe sogar alles so geschrieben wie du, um jeden Fehler auszuschließen:
    Code:
    Last login: Sun Mar  7 14:35:59 on ttys000
    xxx$ cd ./Übungen/
    :Übungen xxx$ ghci
    GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer ... linking ... done.
    Loading package base ... linking ... done.
    Prelude> :load uebung8.hs
    [1 of 1] Compiling Aufgabe1         ( uebung8.hs, interpreted )
    
    uebung8.hs:3:0: Invalid type signature
    Failed, modules loaded: none.
    Prelude> 
    
     
    #13 The_Deathmaster, 07.03.10
    Zuletzt bearbeitet: 07.03.10
  14. royper

    royper Gloster

    Dabei seit:
    07.07.08
    Beiträge:
    64
    Das Problem liegt jetzt nicht an GHC sondern an nem Fehler in deinem Haskell-Skript.

    Steht eigentlich ziemlich genau dort, wo das Problem liegt
    Code:
    uebung8.hs:3:0: Invalid type signature
    In der Datei "uebung8.hs" in der dritten Zeile, nulltes Zeichen (also das erste): ungültige "type"-Bezeichnung.

    Ich vermute, du hast eine Funktion definiert und ihr einen Namen gegeben, der mit einem Großbuchstaben beginnt. In Haskell beginnen Funktionsnamen aber grundsätzlich mit einem Kleinbuchstaben oder einem "_", daher kann GHC nichts damit anfangen (syntax error).
    Ist jetzt nur eine Vermutung, da ich dein Skript nicht kenne.

    Aber du siehst, der GHC gibt dir eine ziemliche genaue Beschreibung des Problems/Fehlers. Ein Grund warum ich GHC dem HUGS vorgezogen habe.

    Zu Smultron:
    Du musst das Programm nicht schließen; es reicht zu speichern. Selbstverständlich musst du jedes mal speichern, bevor du neu kompilieren/interpretieren lässt.
    Du kannst in den Einstellungen von Smultron unter "Open & Save" einstellen, er soll Dateien grundsätzlich als [name].hs speichern ("When saving append Name in "Save as" with: .hs"), was sich eigentlich nicht lohnt. Ob die Datei von OS X mit Smultron assoziiert wird oder nicht ist dem GHC ziemlich egal, da es OS X nur sagt, mit welchem Programm er die Datei standardmäßig öffnen soll.
    Auf Leerzeichen im Dateinamen solltest du eigentlich grundsätzlich verzichten, egal in welcher Programmiersprache; nimm lieber "_", was ich aber nur mache, um bei mehreren Wörter die Lesbarkeit zu erhöhen.

    BTW: Wenn du gerade mit Haskell anfängst, kann ich dir diesen Haskell Cheat-Sheet empfehlen, den ich damals von meinem Tutor bekommen habe. Da steht eigentlich alles drin, was du brauchen solltest und ist prima geeigent, wenn man kurz was nachschlagen möchte.
     
    #14 royper, 07.03.10
    Zuletzt bearbeitet: 07.03.10
  15. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    Bei uns in der Schule (Windows, vielleicht darum?) beginnen Namen IMMER mit einem Großbuchstaben. dass das her anders ist, daran habe ich nicht gedacht. Und dass er Fehler erkennt, daran habe ich einfach nicht gedacht. Aber wenn sogar WinHugs das kann, müsste das Terminal das auch können.
    Ich hab den Namen jetzt kleingeschrieben. Allerdings kommt dann:
    Code:
    Prelude> :load Aufgabe1.hs
    
    Aufgabe1.hs:1:7: parse error on input `aufgabe1'
    Failed, modules loaded: none.
    Prelude> 
    
    Mein Skript sieht so aus:
    [​IMG]
     
  16. royper

    royper Gloster

    Dabei seit:
    07.07.08
    Beiträge:
    64
    Also Funktionsnamen beginnen in Haskell grundsätzlich mit einem Kleinbuchstaben oder einem Untersprich.
    Im Gegensatz dazu werden Modulnamen immer mit einem Großbuchstaben bezeichnet.
    (vgl. "Haskell 98 Language and Libraries The Revised Report", Chapter 1.4: Namespaces)

    Also müsste dein File so aussehen:
    Code:
    module Aufgabe1 where
    
    max3::Int->Int->Int->Int
    max3 a b c
    	| a>b && a>c = a
    	| b>a && b>c = b
    	| True = c	-- "True" und "otherwise" ist das selbe, nur ist True kürzer zu tippen
    
    -- so müsste es aber auch gehen und ist weniger zu Tippen:	
    max3a::Int->Int->Int->Int
    max3a a b c = max (max a b) (max b c)
     
    #16 royper, 07.03.10
    Zuletzt bearbeitet: 07.03.10
  17. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    ok, ich habs, mein fehler war dass ich das a b und c auch bei den Ints stehen hab. Dankeschön für die Hilfe!!
     
  18. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    *** Unfug ***
     
  19. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    @mods: Bitte in Entwickler/Programmierer verschieben

    Alex
     
  20. The_Deathmaster

    The_Deathmaster Zuccalmaglios Renette

    Dabei seit:
    09.01.10
    Beiträge:
    261
    ich glaub ich mach jetzt gar nichts mehr, weil es GERADE funktioniert. und dabei solls bleiben. keine veränderungen mehr; jetzt gehts genau so wie ich es haben will und damit basta. danke an alle hefenden!!
     

Diese Seite empfehlen