You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用Haskell实现stock_test函数(附Python实现参考)

股票投资组合交易记录处理的Haskell函数实现

需求说明

实现Haskell函数stock_test :: String -> Transaction -> Bool,该函数接收一个股票代码和一笔交易,若这笔交易涉及该股票则返回True,否则返回False。

交易由五元组表示,各元素含义:

  • 第一个元素:'B'(买入)或'S'(卖出)
  • 第二个元素:整数,代表交易数量
  • 第三个元素:整数,代表单位交易价格
  • 第四个元素:字符串,代表股票代码
  • 第五个元素:整数,代表交易日期

类型定义与示例交易日志

type Transaction = (Char, Int, Int, String, Int)

test_log :: [Transaction]
test_log = [('B', 100, 1104, "VTI", 1),
            ('B', 200, 36, "ONEQ", 3),
            ('B', 50, 1223, "VTI", 5),
            ('S', 150, 1240, "VTI", 9),
            ('B', 100, 229, "IWRD", 10),
            ('S', 200, 32, "ONEQ", 11),
            ('S', 100, 210, "IWRD", 12)]

函数调用示例

ghci> stock_test "VTI" ('B', 100, 1104, "VTI", 1)
True
ghci> stock_test "ONEQ" ('B', 100, 1104, "VTI", 1)
False

已完成的Python实现

(注:原代码存在逻辑错误,循环内的return位置不正确,修正后的正确实现如下)

def stock_test(stock, transaction):
    return transaction[3] == stock

我的Haskell思路草稿(陷入困境)

stock_test :: String -> Transaction -> Bool
stock_test = 
   let stocks == stocks = True
                         | transaction_to_string == transaction_to_string = True
                         | otherwise = False

正确的Haskell实现

方式1:模式匹配(推荐)

直接对交易元组进行模式匹配,提取第四个元素(股票代码)与目标代码比较:

stock_test :: String -> Transaction -> Bool
stock_test targetStock (_, _, _, stockCode, _) = targetStock == stockCode

方式2:元组解构赋值

通过解构交易元组提取股票代码后再比较:

stock_test :: String -> Transaction -> Bool
stock_test targetStock trans = 
    let (_, _, _, stockCode, _) = trans
    in targetStock == stockCode

说明

你的草稿混淆了变量命名和逻辑判断逻辑,实际上这个函数的核心非常简单:只需提取交易元组中的第四个元素(股票代码),然后和输入的目标股票代码做相等判断即可。Haskell中处理元组最简洁高效的方式是模式匹配,直接解构元组取出需要的元素,避免冗余的代码。

内容的提问来源于stack exchange,提问作者user13744763

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:10:51