Aviseringar
Rensa alla

Haskell är manligt!


Ämnesstartare

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.


   
Citera
Ämnesstartare

Kan någon moderator ändra rubriken. Programmering kan inte vara manligt! [tard]


   
SvaraCitera
Ämnesstartare

Myksa:

Kan någon moderator ändra rubriken. Programmering kan inte vara manligt! [tard]

*Användare varnad*


   
SvaraCitera
Ämnesstartare

NYSON_IS_BACK:

*Användare varnad*

Ahahaha! [bigsmile]
(Backfire)


   
SvaraCitera

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));
}
}

   
SvaraCitera

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.


   
SvaraCitera
aroon

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.


   
SvaraCitera

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


   
SvaraCitera

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!!!


   
SvaraCitera
Ämnesstartare

21st Century Adonis:

Nu har jag övergett det för något så omanligt som java och ocaml....

[cry]


   
SvaraCitera

KID_IS_BACK:

[cry]

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.


   
SvaraCitera

Myksa:

Kan någon moderator ändra rubriken. Programmering kan inte vara manligt! [tard]

Fel forum att säga så [crazy]


   
SvaraCitera
Ämnesstartare

kewtheiin:

Fel forum att säga så [crazy]

Jo jag fick en varning för det där! [sad]


   
SvaraCitera

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 = [love]


   
SvaraCitera
Ämnesstartare

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.


   
SvaraCitera