Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何理解列表';让我们返回并在Haskell中进一步使用它_Haskell - Fatal编程技术网

如何理解列表';让我们返回并在Haskell中进一步使用它

如何理解列表';让我们返回并在Haskell中进一步使用它,haskell,Haskell,我正在尝试编写一个函数“借入”,如果它在借书者到图书的数据库中找到输入的图书标题,则必须返回true。如果在数据库中找不到这样的书,则表示该书从未被借过,因此函数必须返回false。到目前为止,我已经尝试了一千种不同的方法来做到这一点,但我总是离实现这一点只有一步之遥。这是我的代码:我不知道如何获取列表(空或单个字符串),并使用它与bookTitle进行比较,如果它们相同或不相同,则返回true type Person = String type Book = String type Datab

我正在尝试编写一个函数“借入”,如果它在借书者到图书的数据库中找到输入的图书标题,则必须返回true。如果在数据库中找不到这样的书,则表示该书从未被借过,因此函数必须返回false。到目前为止,我已经尝试了一千种不同的方法来做到这一点,但我总是离实现这一点只有一步之遥。这是我的代码:我不知道如何获取列表(空或单个字符串),并使用它与bookTitle进行比较,如果它们相同或不相同,则返回true

type Person = String
type Book = String
type Database = [(Person, Book)]

database::Database
database = [
    ("1", "Haskell"),
    ("2", "Prolog"),
    ("2", "O/S Principles")]

borrowed::Database->Book->Bool
borrowed db bookTitle =
    [loanedBook | (person, loanedBook)<-db, bookTitle == loanedBook]
    --I want to write something like:
    --if above comprehension comes up with a string for loanedBook, then True else False


main = do
print(borrowed database "Haskell")
type Person=String
类型书=字符串
类型数据库=[(人、书)]
数据库::数据库
数据库=[
(“1”、“Haskell”),
(“2”,“序言”),
(“2”、“O/S原则”)]
借用::数据库->书籍->书籍
借来的书名=

[loanedBook |(person,loanedBook)您就快到了。如果没有匹配的书籍,您的列表理解将为空。您可以手动测试:

borrowed db bookTitle
   = case [loanedBook | (person, loanedBook)<-db, bookTitle == loanedBook]
       of [] -> False -- Comprehension is empty
          _  -> True  -- Anything but an empty list means, there was a match!
或者,您可以先将列表简化为
借书
标题,然后使用更简单的
elem
功能:

borrowed db bookTitle = bookTitle `elem` map snd db

您就快到了。如果没有匹配的书籍,您的列表理解将为空。您可以手动测试:

borrowed db bookTitle
   = case [loanedBook | (person, loanedBook)<-db, bookTitle == loanedBook]
       of [] -> False -- Comprehension is empty
          _  -> True  -- Anything but an empty list means, there was a match!
或者,您可以先将列表简化为
借书
标题,然后使用更简单的
elem
功能:

borrowed db bookTitle = bookTitle `elem` map snd db

您就快到了。如果没有匹配的书籍,您的列表理解将为空。您可以手动测试:

borrowed db bookTitle
   = case [loanedBook | (person, loanedBook)<-db, bookTitle == loanedBook]
       of [] -> False -- Comprehension is empty
          _  -> True  -- Anything but an empty list means, there was a match!
或者,您可以先将列表简化为
借书
标题,然后使用更简单的
elem
功能:

borrowed db bookTitle = bookTitle `elem` map snd db

您就快到了。如果没有匹配的书籍,您的列表理解将为空。您可以手动测试:

borrowed db bookTitle
   = case [loanedBook | (person, loanedBook)<-db, bookTitle == loanedBook]
       of [] -> False -- Comprehension is empty
          _  -> True  -- Anything but an empty list means, there was a match!
或者,您可以先将列表简化为
借书
标题,然后使用更简单的
elem
功能:

borrowed db bookTitle = bookTitle `elem` map snd db

非常感谢。“any”工作得非常好。我仍在试图找出如何使用这种理解作为您提到的“case”语句的参数。再次感谢。@RumenHristov:在Haskell中,列表理解只是一个值为列表的表达式。从“外部”看,它与
[1,2,3]之类的表达式没有什么不同
[1..3]
映射(+1)
[0..2]`。对于列表理解可能出现的位置,没有特殊规则,只要表达式及其出现的上下文具有兼容的类型,它是正确的。非常感谢。“任何”工作非常完美。我仍在试图找出如何使用这种理解作为您提到的“case”语句的参数。再次感谢。@RumenHristov:在Haskell中,列表理解只是一个值为列表的表达式。从“外部”看,它与
[1,2,3]
[1..3]等表达式没有什么不同
,或
map(+1)
[0..2]`。对于列表理解可能出现的位置没有特殊规则,只要表达式和它出现的上下文具有兼容的类型,它是正确的。非常感谢。“any”工作得非常好。我仍在试图找出如何使用该理解作为“case”的参数声明。再次感谢。@RumenHristov:在Haskell中,列表理解只是一个值为列表的表达式。从“外部”看,它与
[1,2,3]
[1..3]
映射(+1)
[0..2]等表达式没有区别`。对于列表理解可能出现的位置没有特殊规则,只要它出现的表达式和上下文具有兼容的类型,它就是正确的。非常感谢。“any”工作得非常完美。我仍在试图找出如何使用该理解作为“case”的参数声明。再次感谢。@RumenHristov:在Haskell中,列表理解只是一个值为列表的表达式。从“外部”看,它与
[1,2,3]
[1..3]
映射(+1)
[0..2]等表达式没有区别`。对于列表理解可能出现的位置没有特殊规则,只要表达式及其出现的上下文具有兼容的类型,则列表理解是正确的。