如何使用lambda
定义一个确定数字列表是否为算术序列的函数,并且只使用高阶函数filter
,map
,或foldr
(但不 build-list
)?
我正在考虑形成所有连续差异的列表,然后检查它们是否完全相同,但这将涉及build-list
函数。
我想到的另一种方法是使用foldr
,但我不确定如何计算每个连续术语之间的常见差异。
答案 0 :(得分:0)
foldr
。例如,您可以使用输入列表及其cdr
来调用它。然后在组合功能中,您可以找到差异并将其与
(- (cadr xs) (car xs))
您提前计算的。
不幸的是,两个列表的长度必须相同,因此您必须使用例如(cdr xs)
而不是{。}}。
;; (append (cdr xs) (list #f))
(foldr cons (list #f) (cdr xs))
并相应地修改组合功能:
(lambda (a b r)
(and (or ....
(= (- b a) the-diff))
r))
(r
代表"递归结果" )。
答案 1 :(得分:0)
如果您被允许使用//includes
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
// then in the Button,you can use this
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), "/home", tr("code file (*.txt)"));// string has the file link
// if you using Windows OS replace "/home" with "c://"
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly))
QMessageBox::information(0,"info",file.errorString());
QTextStream in(&file);
QString ex=in.readAll();
srfi/1
版本(允许不均匀的输入列表,与map
版本不同),那么这很容易:
racket/base
如果您只能使用(require srfi/1)
(define (arithmetic-sequence? lst)
(apply = (map - lst (cdr lst))))
个功能,那么您必须进行一些列表修剪:
racket/list