morioXのCraftお勉強日記 RSSフィード

2007-01-29

[] Basic types and definitions (17日目)  Basic types and definitions (17日目) - morioXのCraftお勉強日記 を含むブックマーク

3.7 Syntax (4日目)

演算子(operator)には、それぞれ結合力(binding power)が設定されている。もし、右結合左結合演算子が以下のようにぶつかった場合、結合力が強い演算が優先される。

2 + 3 * 4

→2 + (3 * 4)

演算子関数は以下のように書き換えることができる。

(+) 2 3 = 2 + 3

2 'max' 3 = max 2 3


Exercises 3.18

これまで書いたExercisesの答えを、この本で推奨されているレイアウトに直せ、との事。でも、特にずれた表記にした覚えが無いのでスルー。


Exercises 3.19

以下のような式において、2行目先頭のスペースをとるとどうなるか。

funny x = x + x

 peculiar y = y

スペースを取る前のこの式がそもそもレイアウトルールに反する、ということでよいのかな。2行として表記されているけど、実際は1行の式として解釈されてしまうので問題になる、と。

スペースを取れば別々の式として解釈されるようになるので、問題なくなるはず。


Summary

Chapter3の内容をまとめると以下のような感じ。

2007-01-25

[] Basic types and definitions (16日目)  Basic types and definitions (16日目) - morioXのCraftお勉強日記 を含むブックマーク

3.7 Syntax (3日目)

結合性(associativity)の話。

たとえば4, 8, 99を足し算するような場合、左から足していっても、右から足していっても結果は変わらない。

・(4 + 8) + 99  (左結合)

・4 + (8 + 99) (右結合)

引き算だと、結果が変わってくる

・(4 - 8) - 99 (左結合)

・4 - (8 - 99) (右結合)

2007-01-16

[] Basic types and definitions (15日目)  Basic types and definitions (15日目) - morioXのCraftお勉強日記 を含むブックマーク

3.7 Syntax (2日目)

この本で推奨するレイアウトは、大体下記のようなもの。

fun v1 v2 ... vn

 | g1 ... = e1

 | g2 ... = e2

 ...

 | otherwise = er (もしくは| gr ... = er)

また、ガード記法を使う場合、1つのガードgnや式e1が長くなりすぎてしまった場合、レイアウト的には以下のように記述することもできる。

fun v1 v2 ... vn

 | a long guard which may

  go over a number of lines

   = very long expression which goes

    over a number of lines

 | g2 ... = e2

InfinityInfinity2012/01/06 01:16Hats off to whoever wrote this up and psoetd it.

ydnkgjawysydnkgjawys2012/01/06 17:15ZuoHTw , [url=http://vkqldybbothu.com/]vkqldybbothu[/url], [link=http://yhzppyqdvrco.com/]yhzppyqdvrco[/link], http://gbcrxyjynuyd.com/

txvmpzyaetxvmpzyae2012/01/08 20:23ebeDye <a href="http://laiflrcntwms.com/">laiflrcntwms</a>

mylpkbrfymylpkbrfy2012/01/09 01:29vdax5f , [url=http://vymcnqojqqrr.com/]vymcnqojqqrr[/url], [link=http://czzoemghcscd.com/]czzoemghcscd[/link], http://pumcexolaswy.com/

2007-01-15

[] Basic types and definitions (14日目)  Basic types and definitions (14日目) - morioXのCraftお勉強日記 を含むブックマーク

3.7 Syntax (1日目)

シンタックルールの話。

まずは、レイアウトの基本の話。

mystery x = x * x

  +x

     +2

next x = x * x

の場合、実際には

mystery x = x * x + x + 2

next x = x * x

となる。Haskellでは、式の左端(か、それより左)のインデントレベルに新しい記述が出てくるまで同じ式、として扱われる。これは、サッカーの「オフサイド」を彷彿とさせるので、「オフサイドルール」と呼ぶ。なお、セミコロンを使うことで、改行を行わずとも新しい式を追加することができる。

answer = 42; facSix = 720

この場合、実際には

answer = 42

facSix = 720

と同じになる。

2007-01-14

[] Basic types and definitions (13日目)  Basic types and definitions (13日目) - morioXのCraftお勉強日記 を含むブックマーク

Exercises 3.12

小文字を大文字に変換する関数 capitalize を定義する。

import Data.Char


capitalize :: Char -> Char

capitalize n

 | (ord n >= 97) && (ord n <= 122) = chr (ord n - 32)

 | otherwise = n

Exercises 3.13

Char型の数字'0'をInt型の数値に変換する関数 charToNum を定義する。数値以外の値が入力された場合は、0を返すものとする。

import Data.Char


charToNum :: Char -> Int

charToNum n

 | (ord n >= 48) && (ord n <= 57) = ord n - 48

 | otherwise = 0