Jag vill bara göra alla uppmärksamma på att Haskell är ett otroligt manligt och tufft programspråk. Följande kod är ett litet lekprogram jag skrivit som övning. Det är ett enkelt wordfilter som byter ut alla fula ord i en mening mot motsvarande fina ord.
module Main where
main = print ( censor "Is this loli ? I think my penis just exploded."
["CP", "loli", "penis"] ["Chris Hansen", "duck", "PONOS"] )
-- censor
-- Söker igenom str efter ord som förekommer i bad och ersätter dem med
-- motsvarande ord från good.
censor :: String -> [String] -> [String] -> String
censor str bad good = unwords [replaceBad w bad good | w <- words str]
-- replaceBad
-- Om word finns i listan bad returneras motsvarande ord ur listan good,
-- annars returneras ordet som det är.
replaceBad :: String -> [String] -> [String] -> String
replaceBad word (bad:[]) (good:[]) = if (word == bad) then good else word
replaceBad word (bad:badL) (good:goodL) =
if word == bad
then good
else replaceBad word badL goodL
Plockar vi bort alla typdeklarationer och kommentarer får vi:
module Main where
main = print ( censor "Is this loli ? I think my penis just exploded."
["CP", "loli", "penis"] ["Chris Hansen", "duck", "PONOS"] )
censor str bad good = unwords [replaceBad w bad good | w <- words str]
replaceBad word (bad:[]) (good:[]) = if (word == bad) then good else word
replaceBad word (bad:badL) (good:goodL) =
if word == bad
then good
else replaceBad word badL goodL
Fantastiskt! Ett wordfilter på <10 rader kod! Sug på den, Python!
Någon annan på forumet (förutom CUBERT_IS_BACK) som utsatts för Haskell?
EDIT: för den som undrar så printar koden ut "Is this duck ? I think my PONOS just exploded." när den körs.
Kan någon moderator ändra rubriken. Programmering kan inte vara manligt!
Myksa:
Kan någon moderator ändra rubriken. Programmering kan inte vara manligt!
*Användare varnad*
NYSON_IS_BACK:
*Användare varnad*
Ahahaha!
(Backfire)
imponerande ;)insåg också nu att det var ca 1003231 miljarder år sedan jag rörde python senast
motsvarande kod i java för jämförelse
package test;
public class Main {
static String censur(String text, String[] bad,String[] good) {
for (int i = 0; i < good.length; i++) {
text=text.replace(" "+ bad+ " "," " +good+" ");
}
return text;
}
public static void main(String[] args) {
String[] bad= {"lol","omfg"};
String[] good={"Laughting out load","o my fucking god"};
System.out.println(censur(" omfg im lol ",bad,good));
}
}
Jag började läsa lite grundläggande teori om funktionella programmeringsspråk. Jag tvekar på de praktiska användningsområdena för mig, men manliga och balla är de.
Körde ett newLISP 'script' här omdagen som uppdaterade 700+ textfiler. manuellt skulle det tagit år att göra.. programmet fixade det på under sekunden.
Manliga vet ja inte, men coolt är det.
KID_IS_BACK:
Någon annan på forumet (förutom CUBERT_IS_BACK) som utsatts för Haskell?
Ja du, KID, jag körde haskell när vi fortfarande hängde på irc ihop och jag sshade via din debianserver 🙂 (kommer du inte ihåg, jag bad dig installera ghc och grejer?)...
Nu har jag övergett det för något så omanligt som java och ocaml....
alter ego:
Jag tvekar på de praktiska användningsområdena för mig, men manliga och balla är de.
äh! det handlar egentligen bara om att komma in i tänket, sen blir man lika effektiv som i andra språk. Utom i haskell, för då måste man faktiskt lära sig en massa också. Upp med en hand alla som tyckte att monads var lätt!!!
21st Century Adonis:
Nu har jag övergett det för något så omanligt som java och ocaml....
KID_IS_BACK:
Jag gissar att du fattat monads, alltså 🙂 jag skrev en BF-interpreter, men sen orkade jag inte mer. För små program så är det dock nice... Exempelvis så hade jag hellre använt haskell än ruby då din kod är lite elegantare (jag försökte nu inte skriva bra kod, så beware):
filter = { 'loli' => "arne dahl", 'penis' => 'mangyna', 'bajs' => "skit" }
mening = "loli ! Min penis luktar bajs".split(' ').collect { |s|
if filter.has_key?(s)
s = filter[s]
else s
end
}
mening = mening.join(" ")
jag försökte mig på nåt rekursivt, men det var inte så snyggt i ruby... alls.
Myksa:
Kan någon moderator ändra rubriken. Programmering kan inte vara manligt!
Fel forum att säga så
kewtheiin:
Fel forum att säga så
Jo jag fick en varning för det där!
KID_IS_BACK:
Fantastiskt! Ett wordfilter på <10 rader kod! Sug på den, Python!
Utan tvekan är head::tail rekursion nice i haskell. Ta till exempel och skriv en icke-obfuscated rot13-roterare i typ java och haskell... det är inte så svårt att gissa vilken som blir mest elegant.
public String rot13(String s) {
char[] a = s.toCharArray();
for(int i = 0; i<a.length;i++) {
if((a>='a'&& a<='m') || (a>'A'&&a<'M')) {
a+=13;
} else if((a>='n'&& a<='z') || (a>'N'&&a<'Z')) {
a-=13;
}
}
return new String(a);
}
mot en läsbar, men med all säkerhet inte det kortaste:
rot13Char x | (ord 'a' <= ord(toLower x)) && (ord(toLower x) <= ord 'm') = chr(ord x+13)
| (ord 'n' <= ord(toLower x)) && (ord(toLower x) <= ord 'z') = chr(ord x-13)
| otherwise = x
rot13 s = map rot13Char s
Pattern matching =
KID_IS_BACK:
Någon annan på forumet (förutom CUBERT_IS_BACK) som utsatts för Haskell?
Läste en kurs om det för ett år sen ungefär, fast jag har inte riktigt haft tid att fördjupa mina kunskaper inom det. Riktigt nice faktiskt. Verkar svårt att göra något vettigt med det dock.