首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合整数->字符串类型的两个函数

组合整数->字符串类型的两个函数
EN

Stack Overflow用户
提问于 2014-03-15 01:49:45
回答 2查看 64关注 0票数 0

我有一个名为list_apple的函数,当给定数字5时,它会使用putStr(list_apple 5)逐行打印5 "apple“。即:

代码语言:javascript
复制
list_apple :: Integer -> String
list_apple k = concat["apple\n" | x <- [1..k]]

结果:

代码语言:javascript
复制
apple
apple
apple
apple
apple 

我调用的另一个函数a_row_of_apple,给出了一个数字5

代码语言:javascript
复制
a_row_of_apple :: Integer -> String
a_row_of_apple k = concat["apple " | x <- [1..k]]

结果:

代码语言:javascript
复制
apple apple apple apple apple 

Aim: --我试图使用上面的两个函数定义一个名为list_all_apple的函数

代码语言:javascript
复制
list_all_apple :: Integer-> String

结果:

代码语言:javascript
复制
apple
apple apple 
apple apple apple 
apple apple apple apple
apple apple apple apple apple

我的尝试:使用列表理解的

代码语言:javascript
复制
list_all_apple :: Integer -> String
list_all_apple k = list_apple k ++ a_row_of_aaple k| x<-[1..k]

但没有起作用。我考虑过使用zip函数。但是,zip有两个列表,我有两个字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-15 02:57:22

你可以这样做:

代码语言:javascript
复制
list_all_apple k = concat [(a_row_of_apple $ x - 1) ++ list_apple 1 | x <- [1..k]]

当然,由于list_apple 1只是计算为"apple\n",所以您也可以等效地编写:

代码语言:javascript
复制
list_all_apple k = concat [(a_row_of_apple $ x - 1) ++ "apple\n" | x <- [1..k]]

它可以进一步简化为@wonce's解决方案:

代码语言:javascript
复制
list_all_apple k = concat [a_row_of_apple x ++ "\n"| x<-[1..k]]

(因为(a_row_of_apple $ x - 1) ++ "apple\n" = a_row_of_apple x)

话说回来,我认为您不可能真正地将list_apple有效地组合到这个函数中,因为每一行中的单词"apple"之间的空格:

代码语言:javascript
复制
apple
apple apple
apple apple apple
apple apple apple apple
apple apple apple apple apple

必须在每个换行符(\n)之前。

您还可以通过利用已经使用列表理解的事实来摆脱concat

代码语言:javascript
复制
list_all_apple k = [s | x<-[1..k], s <- a_row_of_apple x ++ "\n"]

或者您只需使用unlines,而不必添加换行符"\n"或使用concat

代码语言:javascript
复制
list_all_apple k = unlines [a_row_of_apple x | x<-[1..k]]
票数 2
EN

Stack Overflow用户

发布于 2014-03-15 01:55:43

虽然不使用*list_apple*,但这将是一个解决方案:

代码语言:javascript
复制
list_all_apple :: Integer -> String
list_all_apple k = concat[a_row_of_apple x ++ "\n"| x<-[1..k]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22418583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档