小编rlh*_*lhh的帖子

检查是否连续订购列表

Haskell中是否有任何库函数可以让我检查列表是否连续排序?例如.[1,2,3,4]有效,[1,2,3,10]无效.

基本上我可以有一个范围在3到5个元素之间的列表,我正在尝试检查该列表是否连续排序.

我的尝试(我不确定这是否是接近它的正确方法,似乎过多的重复)

isSucc:: [Integer] -> Bool
isSucc[]            = True
isSucc(x:y:zs)      = 
    if (x+1) == y
    then True && isSucc(y:zs)
    else isSucc(y:zs)
Run Code Online (Sandbox Code Playgroud)

在我使用此功能之后,我计划使用它来过滤列表列表(仅将列表保留在列表中,并且仅在连续排序时)

haskell functional-programming

9
推荐指数
3
解决办法
3475
查看次数

使自定义数据类型成为可能

有人可以向我解释如何创建自定义数据类型?

**我不允许对Suit本身进行修改,例如.派生(Eq,Ord)

data Suit = Clubs | Diamonds | Hearts | Spades deriving (Eq)
Run Code Online (Sandbox Code Playgroud)

我的尝试:

instance Ord Suit where
    compare suit1 suit2 = compare suit1 suit2
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个连续的循环,并没有停止.

haskell types functional-programming

7
推荐指数
2
解决办法
1802
查看次数

在Haskell中获取自定义列表类型的头部和尾部

我有一个自定义列表类型:

data NNList a = Sing a | Append ( NNList a) ( NNList a) deriving (Eq)
data CList a = Nil | NotNil ( NNList a) deriving (Eq)
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现一个返回列表头部和尾部的函数:

cListGet :: CList a - > Maybe(a,CList a)

我的尝试:

cListGet :: CList a -> Maybe (a, CList a)
cListGet Nil             = Nothing
cListGet xs@(NotNil nxs) =
case nxs of
  Sing x        -> (x, Nil)
  Append l r    -> ((fst $ cListGet (NotNil l)), (Append (snd $ cListGet (NotNil l)), r)) …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming list

5
推荐指数
1
解决办法
2367
查看次数

Ruby:嵌套if语句

我正在写一些代码,结果却让我觉得太难看了.反正我是否可以重构它以便我不使用嵌套的if语句?

def hours_occupied(date)
  #assuming date is a valid date object    
  availability = get_work_hours(date)
  focus = "work"

  if availability.nil
    availability = get_family_hours(date)
    focus = "family"

    if availability.nil
      availability = get_friend_hours(date)
      focus = "friends"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我知道我可以做这样的事情以获得可用性

availability = get_work_hours(date) || get_family_hours(date) || get_friend_hours(date)
Run Code Online (Sandbox Code Playgroud)

但是如何相应地设置焦点变量?

ruby nested-if

4
推荐指数
2
解决办法
2万
查看次数

1种情况下的多种模式

在SML中,您是否可以在一个case语句中使用多个模式?

例如,我有4个算术运算符中的字符串表示,"+", "-", "*", "/"我想打印"PLUS MINUS"的是"+" or "-""MULT DIV",如果它是"*" or "/".

TL; DR:在某些地方,我可以简化以下内容以减少使用案例吗?

case str of
   "+" => print("PLUS MINUS")
 | "-" => print("PLUS MINUS")
 | "*" => print("MULT DIV")
 | "/" => print("MULT DIV")
Run Code Online (Sandbox Code Playgroud)

sml smlnj

4
推荐指数
1
解决办法
2020
查看次数

生成列表的所有连续子列表

我是Haskell的新手,我正在尝试生成列表中所有连续的子列表.

我目前有以下内容:

listSublists :: [a] -> [[a]]
listSublists []     = [[]]
listSublists xs     = [xs] ++ listSublists (init xs) 
Run Code Online (Sandbox Code Playgroud)

我知道上面的函数会生成删除最后一个元素的子列表,但我不知道如何完成我的伪代码.

我的伪代码基本上是,

拿整个完整列表,删除尾部.将(x:xs)的xs传递给listSublists

例如,xs = [1,2,3] [xs] ++ listSublists(init xs)将生成[1,2,3,4],[1,2,3],[1,2],[1] ],[]我试图继续将[2,3,4]作为xs传递,直到列表用完为止.

有人可以给我一些指示吗?还是我以完全错误的方式思考?

haskell list sublist

3
推荐指数
1
解决办法
1369
查看次数

HW:以特定方式展开列表

在Haskell的编程中,Graham Hutton定义了列表展开如下:

unfold :: (b -> Bool ) -> (b -> a) -> (b -> b) -> b -> [a]
unfold p h t x | p x = []
| otherwise = h x : unfold p h t (t x)
Run Code Online (Sandbox Code Playgroud)

定义一个函数

• listUnfold :: (b -> Bool) -> (b -> a) -> (b -> b) -> b -> [a]
Run Code Online (Sandbox Code Playgroud)

这与上面的类似,但在其实现中使用unfoldr并且是非递归的.

我已经尝试了一段时间来解决上面的问题,但我仍然可以设法这样做(在Haskell和一般的函数式编程中相当新).

我的尝试:

listUnfold :: (b -> Bool) -> (b -> a) -> (b -> b) -> b -> …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming unfold

3
推荐指数
1
解决办法
2448
查看次数

扩展Haskell中的列表列表

无论如何,我可以在Haskell中扩展列表列表吗?

我正在尝试编写一个生成[1,2,2,3,3,3,4,4,4,4 .....]的函数,它基本上是1个,2个,2个,3个等等.

我的尝试:

nnss :: [Integer]
nnss = [nPrint x x | x <- [1,2..]]
Run Code Online (Sandbox Code Playgroud)

我尝试的问题是nPrint x x返回一个整数列表,例如,nPrint 2 2将返回[2,2].无论如何,我可以将列表从[1,2,3 ...]"扩展"到[1,2,2,3,3,3 ...]?

haskell list-comprehension list

3
推荐指数
1
解决办法
766
查看次数

将Ruby String插入Sqlite

我有一个示例字符串"Canon PowerShot 12.1-Megapixel",当我运行以下代码时,它似乎失败了:

db.execute "CREATE TABLE IF NOT EXISTS Products( id INTEGER PRIMARY KEY, stockID INTEGER, Name TEXT )" 

id = 12345
name = "Canon PowerShot 12.1-Megapixel"       

db.execute( "INSERT INTO Products ( stockID, Name ) VALUES ( #{id}, #{name} )" )
Run Code Online (Sandbox Code Playgroud)

错误代码是:

C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/sqlite3-1.3.6-x86-mingw32/lib/sqlite3/d
atabase.rb:91:in `initialize': near "PowerShot": syntax error
(SQLite3::SQLExcep tion)
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/sqlite3-1.3.6-x86-mingw32/
lib/sqlite3/database.rb:91:in `new'
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/sqlite3-1.3.6-x86-mingw32/
lib/sqlite3/database.rb:91:in `prepare'
        from C:/Ruby/Ruby193/lib/ruby/gems/1.9.1/gems/sqlite3-1.3.6-x86-mingw32/
lib/sqlite3/database.rb:134:in `execute'
        from E:/Documents/Cowboom/scraping/DBDOTDList.rb:48:in `<main>'
Run Code Online (Sandbox Code Playgroud)

知道为什么在"PowerShot"之后死了吗?

ruby sqlite string insert

1
推荐指数
1
解决办法
7947
查看次数

Haskell中的树构建功能(家庭作业)

data Tree a = Leaf | Node (Tree a) a (Tree a) deriving (Eq, Show)

unfoldTree:: (b -> Maybe (b, a, b)) -> b -> Tree a
unfoldTree f b =
    case f b of
      Nothing -> Leaf
      Just (lt, x, rt) -> Node (unfoldTree f lt) x (unfoldTree f rt)
Run Code Online (Sandbox Code Playgroud)

鉴于上面的两条信息,我被要求实现树构建功能.

我的尝试是

treeBuild :: Integer -> Tree Integer
treeBuild 0 = Leaf
treeBuild n = treeUnfold (\b -> if b < 2^n-1 
                then Just(2*b, b + 1, 2*b + …
Run Code Online (Sandbox Code Playgroud)

tree haskell functional-programming

1
推荐指数
1
解决办法
1924
查看次数