• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Haskell auf dem Mac OS X Snow Leopard nutzen

The_Deathmaster

Zuccalmaglios Renette
Registriert
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!
 

MacAlzenau

Golden Noble
Registriert
26.12.05
Beiträge
22.509
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.
 

Cuthbert87

Granny Smith
Registriert
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...
 
Zuletzt bearbeitet:

The_Deathmaster

Zuccalmaglios Renette
Registriert
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.
 

MacAlzenau

Golden Noble
Registriert
26.12.05
Beiträge
22.509
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?
 

The_Deathmaster

Zuccalmaglios Renette
Registriert
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.
 
Zuletzt bearbeitet:

The_Deathmaster

Zuccalmaglios Renette
Registriert
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 -.-
 

Cuthbert87

Granny Smith
Registriert
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
 

The_Deathmaster

Zuccalmaglios Renette
Registriert
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.
 

royper

Gloster
Registriert
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/
 

royper

Gloster
Registriert
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.

Gibt es nicht irgendwie sowas einfaches, wo man einfach zwei oder besser nur ein Programm aufmacht und das dann nutzt?
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.
 
Zuletzt bearbeitet:

The_Deathmaster

Zuccalmaglios Renette
Registriert
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>
 
Zuletzt bearbeitet:

royper

Gloster
Registriert
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.
 
Zuletzt bearbeitet:

The_Deathmaster

Zuccalmaglios Renette
Registriert
09.01.10
Beiträge
261
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
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:
 

royper

Gloster
Registriert
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)
 
Zuletzt bearbeitet:

The_Deathmaster

Zuccalmaglios Renette
Registriert
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!!
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
@mods: Bitte in Entwickler/Programmierer verschieben

Alex
 

The_Deathmaster

Zuccalmaglios Renette
Registriert
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!!