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

Racket中hash-keys契约违反问题求助:关联列表与哈希表不匹配

解决hash-keys契约违反错误

错误原因

mk-initial-pagerank函数返回的是关联列表(alist),格式为((n2 . 1/5) (n0 . 1/5) ...),但print-hash函数使用了hash-keys、hash-ref这类仅适用于哈希表的操作,因此触发契约违反错误。

两种解决方案

方案1:修改mk-initial-pagerank返回哈希表

将原函数的关联列表构建逻辑改为哈希表生成,这样print-hash可以直接使用:

(define (mk-initial-pagerank graph)
  (let* ((pages (remove-duplicates (apply append graph)))
         (num-pages (length pages)))
    ; 使用for/hash生成哈希表,键为页面符号,值为初始PageRank值
    (for/hash ([page pages])
      (values page (/ 1 num-pages)))))

调用方式不变,(print-hash (mk-initial-pagerank g0))即可输出符合预期的结果。

方案2:修改输出函数处理关联列表

保留原mk-initial-pagerank不变,修改输出函数以适配关联列表:

(define (print-alist alst)
  ; 先按符号排序关联列表的条目,再逐个输出
  (for ([entry (sort alst (lambda (a b) (symbol<? (car a) (car b))))])
    (pretty-print `(,(car entry) ,(cdr entry)))))

; 调用修改后的输出函数
(print-alist (mk-initial-pagerank g0))

验证结果

两种方案执行后,都会输出:

'(n0 1/5)
'(n1 1/5)
'(n2 1/5)
'(n3 1/5)
'(n4 1/5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:23:12