HaskellとPrologについて

derok
記事: 51
登録日時: 12年前

HaskellとPrologについて

投稿記事 by derok » 9年前

Haskellの勉強してるのですが全然要領が掴めません。
今まで約5年間手続き型の世界でプログラミングして自分にとって謎の世界です。
変数の再代入不可のせいでどうプログラミングしていけばいいのか見えてこないのです。
いや、STモナド乱用すればできるのでしょうか、それってHaskellでやることって感じがするのですよね。
文法はなんとなく分かった気がするのですが、それをコードすることができないのです。
そこそこ実用的なHaskellのサンプルコードってないのですかね。
図書館で本借りてきてもいまいち要領掴めません。
Prologはもっと訳分かりません。brainf*ckの方がコード書けそうな気がしてくるレベル。
最早文法すらまともに理解できてません。
図書館で探してきても21世紀に書かれた本がないという・・・
結構大きい図書館なんですがね。
・・・実際にやるとなったらPrologの方が楽でしょうが。
以下HaskellでAOJ600の問題をやってみた結果です。

CODE:

import Control.Applicative
import Control.Monad.State
readDataList :: Int -> IO [Int]
readDataList 0 = return [] 
readDataList n = (:)  num  list
	where 
		num = read  getLine :: IO Int
		n_ = n - 1 :: Int
		list = readDataList n_ :: IO [Int]
sprit :: [a]->Int->[[a]]
sprit list n= [take n list] ++ [drop n list]
allPattern :: [a]->Int->[[[a]]]
allPattern list 1 = [[list]]
allPattern list n = 
	(`execState` [] ) $ do
		let length_ = length list :: Int
		let last = length_ -  (n - 1) ::Int
		forM_ [1..last] $ \i->
			let 
				front = take i list
				back = drop i list
				result = allPattern back $ n - 1
				result_length= length result
			in forM_ [0..result_length - 1] $ \j->
				let 
					list = [front] ++ ( result !! j )
					add = (list:)
				in modify add
func list = 
	let
		pattern = allPattern list 3
		list1 = (`map` pattern) $ \list_->
			(`map` list_) $ \list_1->
				sum list_1
		list2 = (`map` list1) $ \list_->
			minimum list_
		pattern1 = allPattern list 4
		list11 = (`map` pattern1) $ \list_->
			(`map` list_) $ \list_1->
				sum list_1
		list12 = (`map` list11) $ \list_->
			let
				length_ = length list_
				list_1 = take (length_ - 1) list_
				list_2 = drop 1 list_1
				last=list_ !! (length_ - 1)
				list_3 = ((list_!!0)+last):list_2
			in list_3
		list13 = (`map` list12) $ \list_->
			minimum list_
			
	in max (maximum list2) (maximum list13)
main = do
	let num = read  getLine :: IO Int
	let list = readDataList = list
	print =<< result
・・・これHakesll対応してないのですね。
最後に編集したユーザー derok on 2016年7月27日(水) 11:14 [ 編集 2 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 15年前

RE: HaskellとPrologについて

投稿記事 by みけCAT » 9年前

derok さんが書きました:・・・これHakesll対応してないのですね。
codeタグなら、Hakesllは対応していないようですが、Haskellは対応しているようですよ。

CODE:

main :: IO ()
main = putStrLn "hello, world"

derok
記事: 51
登録日時: 12年前

RE: HaskellとPrologについて

投稿記事 by derok » 9年前

みけCAT さんが書きました:
derok さんが書きました:・・・これHakesll対応してないのですね。
codeタグなら、Hakesllは対応していないようですが、Haskellは対応しているようですよ。

CODE:

main :: IO ()
main = putStrLn "hello, world"
言語一覧にないから対応してないものだと思ってました。