小编Sim*_*ine的帖子

字符串仅包含haskell中的字母表

我想创建一个函数来决定字符是Haskell中字母表中的字母

isLetter :: Char -> Bool
Run Code Online (Sandbox Code Playgroud)

因此结果可能如下所示:如果我输入isLetter 'c',结果将是True,如果是isLetter ' ',那么结果就是False.

haskell functional-programming character letter alphabet

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

什么是嵌套模式?

什么是嵌套模式?我无法理解为什么以下嵌套模式:

exception BadTriple

fun zip3 list_triple =
    case list_triple of
         ([],[],[]) => []
       | (hd1::tl1,hd2::tl2,hd3::tl3) => (hd1,hd2,hd3)::zip3(tl1,tl2,tl3)
       | _ => raise BadTriple

fun unzip3 lst =
    case lst of
         [] => ([],[],[])
       | (a,b,c)::tl => let val (l1,l2,l3) = unzip3 tl
                        in
                          (a::l1,b::l2,c::l3)
                        end
Run Code Online (Sandbox Code Playgroud)

另外,我无法理解嵌套模式嵌套case-expression之间有什么不同我可以得到一些关于这些事情的例子吗?

sml smlnj

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

为什么这个功能是咖喱的?

根据我的理解,curried函数应该总是返回一个函数.但是,在下面的代码中,我相信这个函数返回一个列表.但是当我检查类型时,它看起来像一个curried函数.

fun zipWith f xs ys =
    case (xs,ys) of
         ([],_) => []
      | (_,[]) => []
      | (x::xs',y::ys') => (f(x,y)) :: zipWith f xs' ys'
Run Code Online (Sandbox Code Playgroud)

类型:

val zipWith = fn : ('a * 'b -> 'c) -> 'a list -> 'b list -> 'c list.
Run Code Online (Sandbox Code Playgroud)

有人可以解释这个函数中的类型和currying的工作原理.任何帮助表示赞赏!

sml currying

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

为什么 foldr const 0 "tacos" 不在 Haskell 中编译?

所以foldr const 0 "tacos"应该解开成为类似的东西

0 const ('t' const ('a' const ('c' const ('o' const 's')))). 
Run Code Online (Sandbox Code Playgroud)

我认为它只会停止,0 const ('t'因为 Haskell 是惰性求值的,而 const 只接受第一个参数。那么,理论上,该函数不会适用于 1 吗?

但这不起作用。替换0""也不起作用。有谁知道为什么?

谢谢!

haskell fold

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

从签名实现 Haskell 函数

我试图围绕 Haskell 进行思考,但在尝试将以下签名实现为函数时遇到了麻烦。你们能给我一个使用 lambda 表达式的例子吗?

(b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

haskell

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