首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由Dr球拍提供的MiniKanren支持

由Dr球拍提供的MiniKanren支持
EN

Stack Overflow用户
提问于 2018-05-28 22:51:47
回答 4查看 488关注 0票数 8

我从“推理模式-第二版”这本书和DrRacket模式环境开始学习miniKanren。

我安装了"faster-minikanren“包,但本书的第一个使用命令run*的示例(例如,(run* q #f))会产生诸如run*: bad syntax in: (run* q #f)之类的错误消息。

这是否意味着"faster- minikanren“套餐没有提供正确的minikanren定义?还是我犯了个错误?

EN

回答 4

Stack Overflow用户

发布于 2018-05-29 00:42:14

正如the readme所说,您需要将(require minikanren)放入球拍源文件中。

我在第二行,在#lang racket之后,复制了appendo定义,

代码语言:javascript
复制
#lang racket
(require minikanren)

(define (appendo l s out)
  (conde
    [(== l '()) (== s out)]
    [(fresh (a d res)
       (== `(,a . ,d) l)
       (== `(,a . ,res) out)
       (appendo d s res))]))

然后点击"Run",并在提示符下尝试:

代码语言:javascript
复制
> (run* (q r) (appendo q r '(1 2 3 4 5)))
'((() (1 2 3 4 5))
  ((1) (2 3 4 5))
  ((1 2) (3 4 5))
  ((1 2 3) (4 5))
  ((1 2 3 4) (5))
  ((1 2 3 4 5) ()))
> 

似乎起作用了。这不是:

代码语言:javascript
复制
> (run* q #f)
. run*: bad syntax in: (run* q #f)

> (run* (q) #f)
application: not a procedure;
 expected a procedure that can be applied to arguments
  given: #f
  arguments...:

但这确实做到了:

代码语言:javascript
复制
> (run* (q) (lambda (_) #f))
'()
> 
票数 6
EN

Stack Overflow用户

发布于 2018-05-29 01:16:27

好了威尔·内斯说的都是对的。让我补充另一个高级评论:看起来是进一步发展和缺乏支持的结合导致了你的情况。

1)自这本书出版以来,minikanren语言似乎一直在不断发展。

2)看起来某些变化(例如#u成功的目标)并不容易适应球拍(尽管使用Reader扩展肯定是可能的),而您正在使用的库的作者选择了更改语言。

有一件事可能会有帮助,那就是原始minikanren包的文档(在线https://docs.racket-lang.org/minikanren/index.html ),它的格式很好,可读性很好,并为进一步阅读提供了参考。

票数 5
EN

Stack Overflow用户

发布于 2018-06-26 05:54:50

你可能会发现我们刚刚发布的第二版代码很有帮助:

https://github.com/TheReasonedSchemer2ndEd/CodeFromTheReasonedSchemer2ndEd

希望这能有所帮助!

干杯,

--威尔

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50568981

复制
相关文章

相似问题

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