国际象棋游戏中的移动

我有一个移动过程,通过传递一个对:(cons source dest)来对棋盘上的棋子应用一个合法移动,因此(cons 1 2)会将棋盘上位置1的棋子移动到位置2。

我正在尝试创建一个过程,使其应用之前做过的相同移动。我尝试了

(move (reverse move)),这会传入(cons 2 1),从而将棋子移回原位。

不幸的是,reverse对对子不起作用。我不能将其转换为列表,因为这将不得不更改很多代码以适应末尾的null。

有人能想出什么办法吗?顺便说一下,我使用的是MIT Scheme。


回答:

你需要为此实现自己的reverse-pair过程,它可以像这样简单:

(define (reverse-pair p)  (cons (cdr p) (car p)))

或者这样,稍微花哨一些但可读性较差:

(define (reverse-pair p)  `(,(cdr p) . ,(car p)))

无论哪种方式,它都能按预期工作:

(reverse-pair '(1 . 2))=> '(2 . 1)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注