获取列表中给定元素的索引

时间:2019-02-19 23:59:04

标签: prolog

我正在尝试解决一些基本的难题以学习序言。我试图递归地获取列表中给定元素的索引。我被困住试图解决问题,我不确定为什么。当我执行此操作时,它只会返回“ false”,而不是索引。

numGrades <- c(66,02,99,59,82)
letGrades <- cut(
  numGrades,
  breaks = c(-Inf, 6:9, Inf) * 10,
  labels = LETTERS[c(6, 4:1)],
  right = FALSE
)
letGrades

library(dplyr)
letGrades <- case_when(
  numGrades >= 90 ~ "A",
  numGrades >= 80 ~ "B",
  numGrades >= 70 ~ "C",
  numGrades >= 60 ~ "D",
  TRUE            ~ "F"
)
letGrades

我用来检查代码elem(_, [], 0). elem(E, [E | T], RES) :- elem(E, T, CUR_RES), RES is CUR_RES + 1.

的示例查询

1 个答案:

答案 0 :(得分:1)

您的

问题
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          SingleChildScrollView(
            child: Center(
              child: Column(
                children: <Widget>[
                  child(),
                  child(),
                  child(),
                  child(),
                  child(),
                ],
              ),
            ),
          ),
          Align(
            alignment: Alignment.bottomCenter,
            child: Opacity(opacity: showBottomBar ? 1 : 0, child: bottomBar()),
          )
        ],
      ),
    );

是当它试图与基本情况统一时

elem(2, [1, 2], X).

失败,因为第二个参数不为空。

当试图与递归情况统一

 elem(_, [], 0).

elem(E, [E | T], RES) :- elem(E, T, CUR_RES), RES is CUR_RES + 1. E,它要求列表是2,但是由于列表是[2|T],因此也无法统一。

这更接近您想要的

[1,2]

示例运行:

elem(E,[E|_],0).

elem(E,[_|T],Res) :-
    elem(E,T,Cur_rest),
    Res is Cur_rest + 1.

您需要在基本情况下而不是在递归情况下对要查找的值进行匹配。完成后,其余更改将根据需要进行。