Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


"Instruktioner" i Haskell?

Postades av 2005-09-29 18:47:15 - Niklas Jansson, i forum systemutveckling generellt, Tråden har 5 Kommentarer och lästs av 1401 personer

Tänkte kolla om någon är en fena på Haskell här (vet inte om samma saker gäller för alla funktionella språk).

Jag sitter och lär mig Haskell, men har fastnat lite på bland annat instruktioner.
Vad fan är en instruktion?

Vad jag förstår kan man returnera funktioner precis som vad som helst annat. Sen tillkommer instruktioner som är en slags "mall" för hur man gör något?
Och enda sättet att köra en instruktion är att använda do?
Och hur funkar det överhuvudtaget?

PS. Vet att det blev lite skumt forumval, men var passar det annars in?


Svara

Sv: "Instruktioner" i Haskell?

Postades av 2005-09-29 20:11:59 - Dan Persson

Hej!

Jag höll på lite med Common Lisp i våras, vi läste 6p här. Om jag inte minns fel så är väl Haskell och Lisp ganska lika.

Tyvärr har jag inte hört talas om "instruktioner" i Lisp, men den första tanke som dyker upp när jag läser ditt inlägg är att det motsvarar mapcar i Lisp. Mapcar fungerar så att det tar en länkad lista och en funktion som argument och applicerar funktionen på varje element i listan. Men när jag tänker efter lite mer så känns det inte som det borde heta "instruktion"...

/Dan


Svara

Sv: "Instruktioner" i Haskell?

Postades av 2005-09-29 21:51:21 - Per Persson

Nyckelordet <b>do</b> används tillsammans med monader, som kan sägas vara den funktionella världens implementation av sekvensiell programmering.

En monad <b>m</b> innehåller i princip två funktioner:
<b>return</b> :: a -> m a
<b>>>=</b> :: m a -> (a -> m b) -> m b

<b>return</b> kan tolkas som att den paketerar ett värde av någon typ a i ett "monadobjekt". Jämför med en konstruktor i oop.

<b>>>=</b> kan kallas sekvenskonstruktor; den tar ett monadobjekt och en funktion som utifrån det paketerade värdet skapar ett nytt monadobjekt. Resultatet är ett nytt monadobjekt.

Ett par exempel från monaden IO är
getLine :: IO String
putStrLn :: String -> IO ()

Ett program som läser en rad och skriver ut den två gånger kan skrivas så här:
<code>
getLine >>= (\rad ->
putStrLn rad >>= (\dummy ->
putStrLn rad))
</code>
Variabeln rad kommer här att vara av typen String.

För att förenkla användningen av monader och för att man skall se likheten med vanlig imperativ programmering, har do-konstruktionen utvecklats. Ovanstående program kan där skrivas
<code>
do rad <- getLine
putStrLn rad
putStrLn rad
</code>

Varför behövs då monader? Jo, i ren funktionell programmering får funktioner inte ha några sidoeffekter som de kan ha i imperativa språk. Därför måste hanteringen av sidoeffekter hanteras i en "skyddad" miljö från vilken värdena inte kan läcka ut. Och som synes ovan finns en paketingsfunktion (konstruktor), men ingen uppaketeringsfunktion ("getter" i oop). Har ett värde väl paketerats kan man inte få ut det.

Ett fullständigt program i Haskell, ett som kan kompileras för att köras fristående, har ett objekt som heter <b>main</b> och som är av typen IO a för någon typ a.
<code>
main = do rad <- getLine
putStrLn rad
putStrLn rad
</code>
Detta objekt "körs" och kan alltså jämföras med main i C m.fl. språk. Inne i monadkoden kan "vanliga" funktioner anropas:
<code>
main = do rad <- getLine
putStrLn (rad ++ "\n" ++ rad)
</code>
Här är <b>++</b> konkateneringsoperatorn som tar två listor (t.ex. två strängar) och sammanfogar dem.

Det känns som jag inte riktigt vet hur jag skall avsluta denna utläggning, så jag väljer nu att avbryta med denna punkt:.


Svara

Sv:"Instruktioner" i Haskell?

Postades av 2005-09-30 15:17:43 - Niklas Jansson

Nej, Dan. Det är inte samma, men tack ändå. =)

Per: Tackar för den lektionen. Tyvärr verkar mitt hugs vara lite lätt korkat just nu.
Jag får nämligen inte

<code>
main = do rad <- getLine
putStrLn rad
putStrLn rad
</code>

att fungera. Den klagar på att "last argument in do {...} must be an expression" !?

Jag hade nog förstått det mesta rätt, men det är ändå lite svårt att greppa dessa instruktioner...


Svara

Sv: "Instruktioner" i Haskell?

Postades av 2005-09-30 15:49:46 - Per Persson

Antagligen är det problem med indraget så att den första raden, <b>rad <- getLine</b> tolkas som även varande den sista. Kolla över det! Använd inte tabulator, utan använd mellanslag.

Du kan även lägga in ett radbyte efter <b>do</b>:
<code>
main = do
rad <- getLine
putStrLn rad
putStrLn rad
</code>

Ett annat sätt att skriva det på är
<code>main = do { rad <- getLine; putStrLn rad; putStrLn rad; }</code>

Haskell omvandlar den förra syntaxen till den senare utifrån vilka indrag som har gjorts.


Svara

Sv:"Instruktioner" i Haskell?

Postades av 2005-09-30 18:45:30 - Niklas Jansson

Jag kör visserligen inte med tabbar, men det där förklarade en del. Nu ska vi se om jag får ordning på det.
Tack igen!


Svara

Nyligen

  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 843
27 961
271 763
1 057
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies
Expand
next previous
Close

Previous

0/0

Next